2012-10-03 25 views
0

作者建议将初始烫发大小和最大烫发大小值设置为相同的值可以防止完整的GC发生?将初始烫发大小和最大烫发大小设置为相同以防止完整GC

的存储空间,无论是旧的还是永久的,是充分,以适应新的对象或类,它需要 朝其最大尺寸扩大,如果相关参数有不同的值。换句话说,如果 -Xms和-Xmx具有不同的值,并且旧需要的大小从-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

回答

2

我想他说。

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

需要注意的是:

  • 链接的 “白皮书” 是不是甲骨文/ Sun文件。
  • 作者不是Oracle/Sun员工。
  • 该论文比较陈旧,涉及Java 4和Java 5 JVM。

通过打开GC日志记录并查看完整的GC和堆扩展之间是否存在关联,应该可以通过这种方式获取证据。


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