1

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

我遇到的问题是完整的垃圾收集没有像我预期的那样经常运行,并且很好奇 VmWare 变量是否与它有关。

4

3 回答 3

1

一般来说,垃圾收集器只会在真正需要的时候运行一次完整的 GC。原因是它需要很多时间。它将尝试执行更多更小的 GC,从而花费更少的时间。在大多数情况下,这似乎是一个很好的策略。

如果你想尝试 tweek 事情,你可以添加一些额外的 GC 标志到 VM。看到这个 另外你可能想确保你正在运行服务器虚拟机而不是客户端虚拟机。

我想真正的问题是你想要实现什么。如果您的内存不足,可能不是因为 GC。这可能是因为内存泄漏,是的,您可以在内存管理的环境中创建它们。他们只是有点不同。

于 2008-09-22T16:57:41.840 回答
1

我没有注意到 VmWare 实例上的 Java 垃圾收集有任何明显问题。我建议您使用像Netbeans 6 分析器或YourKit这样的好的分析器来分析您的应用程序,以确保您没有任何内存泄漏。一旦我们消除了我们的泄漏,我们就不需要太担心垃圾收集了。我相信一些垃圾收集器依赖于 CPU 使用率。无论如何,您都可以在此处阅读有关为 Java 6 调整垃圾收集的信息。较旧的 VM 版本存在类似的文档。

于 2008-09-22T17:04:58.250 回答
0

我自己还没有看到这个,但是根据您运行的 VMware 版本以及您的处理器类型,虚拟机时钟可能比实时运行得更快(或更慢),这当然会影响间隔垃圾集合运行在。

有关计时问题的高级概述,以及有关如何使 VM 时间尽可能接近实时的建议,请参阅 VMware 论文VMware Virtual Machines 中的计时

于 2008-09-22T16:57:43.587 回答