VMWare服务器上的Java垃圾回收

时间:2020-03-06 14:33:02  来源:igfitidea点击:

在VmWare实例上运行应用程序时,是否有人遇到Java默认垃圾收集器的问题?

我遇到的问题是,完整的垃圾回收没有按我期望的那样运行,并且很好奇VmWare变量是否与此有关。

解决方案

通常,垃圾收集器仅在确实需要时才运行完整的GC。原因是需要很多时间。它将尝试做更多的小型GC,而这些GC将花费更少的时间。大多数情况下,这似乎是一个不错的策略。

如果我们想尝试周操作,则可以将一些额外的GC标志添加到VM。另外,我们可能要确保正在运行服务器虚拟机而不是客户端虚拟机。

我想真正的问题是我们要达到的目标。如果内存不足,可能不是因为GC。这可能是由于内存泄漏引起的,是的,我们可以在内存托管环境中创建它们。它们只是有些不同。

我自己还没有看到这种情况,但是取决于我们运行的是哪个版本的VMware,以及处理器类型,虚拟机的时钟运行速度可能比实时运行的快得多(或者慢一些),这当然会影响间隔垃圾集合运行于。

有关计时问题的高级概述,以及有关如何使虚拟机时间尽可能接近实时的建议,请参见VMware论文VMware中的计时
虚拟机。

我没有注意到VmWare实例上Java中的垃圾回收有任何明显的问题。我建议我们使用诸如Netbeans 6探查器或者YourKit之类的良好探查器来探查应用程序,以确保没有任何内存泄漏。一旦我们消除了泄漏,我们就不必担心垃圾收集了。我相信某些垃圾收集器取决于CPU使用率。无论如何,我们可以在此处阅读有关为Java 6调整垃圾收集的信息。对于较早的VM版本,存在类似的文档。