为什么我的垃圾回收日志显示可用最大堆大小为3.8GB,而我已将最大堆大小分配为4GB?

16 浏览
0 Comments

为什么我的垃圾回收日志显示可用最大堆大小为3.8GB,而我已将最大堆大小分配为4GB?

我在一台64位的RHEL 6机器上安装了一个64位的Hotspot JDK版本1.7.0。我在我的tomcat应用程序中使用以下JVM选项。\nCATALINA_OPTS=\"${CATALINA_OPTS} -Dfile.encoding=UTF8 -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false -Duser.timezone=EST5EDT\"\n# 通用的堆大小设置\nCATALINA_OPTS=\"${CATALINA_OPTS} -Xms4096m -Xmx4096m -XX:NewSize=2048m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseCompressedOops -XX:+DisableExplicitGC\"\n# 启用CMS GC策略\nCATALINA_OPTS=\"${CATALINA_OPTS} -XX:+UseConcMarkSweepGC -XX:CMSWaitDuration=15000 -XX:+CMSParallelRemarkEnabled -XX:+CMSCompactWhenClearAllSoftRefs -XX:+CMSConcurrentMTEnabled -XX:+CMSScavengeBeforeRemark -XX:+CMSClassUnloadingEnabled\"\n# 详细的垃圾收集日志记录\nCURRENT_DATE=`date +%Y%m%d%H%M%S`\nCATALINA_OPTS=\"${CATALINA_OPTS} -verbose:gc -XX:+PrintGCDetails -Xloggc:${CATALINA_BASE}/logs/gc-${CURRENT_DATE}.log -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution\"\n当我进行垃圾收集分析时,GC日志显示的最大可用堆大小仅为3.8GB,而不是分配给JVM的4GB。为什么会这样?

0
0 Comments

垃圾收集日志显示最大可用堆大小为3.8GB,而我已经将最大堆大小分配为4GB。这个问题的原因是,新生代中的80%是Eden空间,两个Survivor空间各占10%。每次只有一个Survivor空间是空的。因此,有效的堆大小为1638.4MB(Eden空间)+ 204.8MB(Survivor空间)+ 2048MB(老年代)= 3891.2MB。解决方法是将最大堆大小设置为3891.2MB或更大。

0