0

作者是否建议将初始 perm size 和最大 perm size 值设置为相同的值可以防止完全 GC 发生?

旧的或永久的内存空间已满,为了容纳新的对象或类,如果相关参数具有不同的值,则需要将其扩展到最大大小。换句话说,如果 -Xms 和 -Xmx 具有不同的值,并且如果 Old 的大小需要从 -Xms 向 -Xmx 增加以容纳更多对象,则调用 FullGC。类似地,如果 -XX:PermSize 和 -XX:MaxPermSize 具有不同的值,并且永久空间需要向 -XX:MaxPermSize 增加以容纳新的 java 类,则调用 FullGC。 这可以通过始终将 -Xms 和 -Xmx  以及 -XX:PermSize 和 -XX:MaxPermSize 设置为相同的值来避免。

Java 性能调优白皮书: http: //mfinocchiaro.files.wordpress.com/2008/07/java-virtual-machine-neutral.pdf

4

1 回答 1

2

我想他是这么说的。

但我不认为他是对的。当然,我不记得在任何官方的 Sun / Oracle 文档中提到过这一点。

注意:

  • 链接的“白皮书”不是 Oracle / Sun 文档。
  • 作者不是 Oracle / Sun 员工。
  • 这篇论文相当陈旧,涉及 Java 4 和 Java 5 JVM。

通过打开 GC 日志并查看完整 GC 和堆扩展之间是否存在相关性,应该可以通过一种或另一种方式获得证据。


我(经常)听说将初始堆大小和最大堆大小设置为相同可以减少 JVM 预热开销。这是断言/暗示每个堆扩展之前都有一个完整的 GC,我对此表示怀疑。

于 2012-10-03T01:57:42.460 回答