在OpenJDK 1.6中使用以下选项,最终得到600mb eden,2mb幸存者和3gb tenured(来自JConsole)。我只是搞乱设置,试图弄清楚为什么JVM不会按照我想要的方式分配内存。
这个应用程序需要在Eden上比Tenured更重。
JAVA_OPTS =" -Duser.timezone = US / Eastern -Xms6000m -Xmx8000m -Xmn3000m -XX:SurvivorRatio = 1 -XX:MaxPermSize = 1500m -XX:+ CMSPermGenSweepingEnabled -XX:+ CMSClassUnloadingEnabled -XX:ReservedCodeCacheSize = 200m -XX:+ UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction = 35 -XX:+ PrintGCDetails -Xloggc:/var/log/tomcat6/gc.log -XX:+ UseGCLogFileRotation -XX:NumberOfGCLogFiles = 10 -XX:GCLogFileSize = 100M -XX: + PrintGCDateStamps -verbose:gc -XX:+ PrintTenuringDistribution -XX:+ PrintPromotionFailure -XX:PrintFLSStatistics = 1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port = 8090 -Dcom.sun.management.jmxremote .authenticate = false -Dcom.sun.management.jmxremote.ssl = false"
我基于阅读的期望是我要在堆中启动6000mb,最大8000mb。 3000mb将被赋予新一代,幸存者比率将使伊甸园记忆:幸存者在1500mb:1500mb。这显然不是我在JConsole中看到的(上图)。
有人可以提供一些见解,了解为什么我拥有的旗帜会以他们的方式与我期望的方式展示JConsole中的eden / survivor / tenured吗?我一直在倾注JVM文档一段时间,这似乎不像文档中的行为。
非常感谢您的投入!