Java 为字符串处理应用程序在JVM中设置年轻和任期生成比率

Java 为字符串处理应用程序在JVM中设置年轻和任期生成比率,java,tomcat,jvm,jvm-arguments,Java,Tomcat,Jvm,Jvm Arguments,我有一个应用程序,它根据字符串的相似性对数组进行分组。它是从TomCat服务器公开的,启动参数是 /usr/lib/jvm/java/bin/java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/username/shared/log/heapdump.log -XX:-UseAdaptiveSizePolicy -XX:NewRatio=3 -Xms8192M -Xmx8192M -XX:+UseParNewGC -verbos

我有一个应用程序,它根据字符串的相似性对数组进行分组。它是从TomCat服务器公开的,启动参数是

/usr/lib/jvm/java/bin/java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/username/shared/log/heapdump.log -XX:-UseAdaptiveSizePolicy -XX:NewRatio=3 -Xms8192M -Xmx8192M -XX:+UseParNewGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/home/username/shared/log/gc.log -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7896 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -classpath :/usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat7/temp -Djava.util.logging.config.file=/usr/share/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start 
我的GC日志类似于

316.795: [GC 316.795: [ParNew: 233516K->15658K(249216K), 0.0143200 secs] 1899624K->1683370K(8360960K), 0.0143830 secs] [Times: user=0.17 sys=0.00, real=0.02 secs]
我的GC日志中不断出现(并发模式失败)错误。我相信,这是因为年轻一代的规模很小。我试图将年轻一代与新一代的比例设定为3:1,但从日志中可以看出,年轻一代的规模仍然是249216K

为什么JVM不尊重
-XX:NewSize
选项?

请查看此选项,特别是

年轻一代

第节:

默认情况下,年轻一代的大小由NewRatio控制。例如,设置-XX:NewRatio=3意味着年轻一代和终身一代之间的比率为1:3。换句话说,eden和幸存者空间的组合大小将是总堆大小的四分之一

看起来您正在以与预期相反的方式设置比率