JVM代数间距

使用OpenJDK 1.6中的以下选项,我最终得到600mb eden,2mb幸存者和3gb终身(来自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 =假”

我基于阅读的期望是,我将在堆中启动6000mb,最大8000mb . 3000mb将被赋予新一代,幸存者比率将使伊甸园记忆:幸存者在1500mb:1500mb . 这显然不是我在JConsole中看到的(上图) .

有人可以提供一些见解,为什么我的旗帜会以他们的方式和我期望的方式显示JConsole中的eden / survivor / tenured?我一直在倾注JVM文档一段时间,这似乎不像文档中的行为 .

非常感谢您的投入!

回答(0)