JVM Generations Spacing
Используя следующие параметры в OpenJDK 1.6, я получаю 600 МБ eden, 2 МБ оставшихся в живых и 3 ГБ в постоянном режиме (из JConsole). Я просто пытаюсь выяснить, почему JVM не выделяет память так, как я хочу.
Это приложение должно опираться на Эдем сильнее, чем штатное.
JAVA_OPTS = "- Duser.timezone = США / Восточная зона -XX: CMSInitiatingOccupancyFraction=35 -XX:+PrintGCDetails -Xloggc:/var/log/tomcat6/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XXS: gG-CD: + Print: gGcc: gGc: gg:: PDF -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= ложь"
Мое ожидание, основанное на чтении, состоит в том, что в куче у меня будет 6000 МБ для запуска, максимум 8 000 МБ. 3000 мегабайт будет передано новому поколению, а соотношение оставшихся в живых поместит eden memory: Survivor в 1500 мб: 1500 мб. Это явно не то, что я вижу в JConsole (см. Выше).
Может ли кто-нибудь дать некоторое представление о том, почему у меня есть флаги, показывающие eden / Survivor / Tenured в JConsole так, как они делают, а не так, как я ожидаю? Некоторое время я поливал документацию по JVM, и это не похоже на поведение в документации.
Большое спасибо заранее за вклад!