Недавно мы изменили версию JDK с 1.7 на 1.8.
Мы запускаем обычный процесс JVM с указанными ниже аргументами памяти, пожалуйста, ниже приведен лишь их фрагмент.
MEM_ARGS = "-DTENURED_SIZE=5G -Xms10G -Xmx10G -DCONSERVATIVE_ZONE=0 -DMEMORY_PANIC_DISABLE=YES "
-XX:+UseParNewGC -XX:NewSize=256m -XX:MaxNewSize=256m -XX:SurvivorRatio=3
GC_ARGS = "-XX:-UseBiasedLocking -XX:+CMSPrecleanRefLists1 "
GC_ARGS = "$GC_ARGS -XX:+CMSPrecleanRefLists2 "
GC_ARGS = "$GC_ARGS -XX:+CMSClassUnloadingEnabled "
GC_ARGS = "$GC_ARGS -XX:+CMSScavengeBeforeRemark "
GC_ARGS = "$GC_ARGS -XX:PrintCMSStatistics=2 "
GC_ARGS = "$GC_ARGS -XX:+UseCMSInitiatingOccupancyOnly "
GC_ARGS = "$GC_ARGS -XX:CMSMarkStackSize=4m "
GC_ARGS = "$GC_ARGS -XX:CMSMarkStackSizeMax=5G "
GC_ARGS = "$GC_ARGS -XX:ParGCDesiredObjsFromOverflowList=20k "
GC_ARGS = "$GC_ARGS -XX:+UseConcMarkSweepGC "
GC_ARGS = "$GC_ARGS -XX:CMSInitiatingOccupancyFraction=40 "
GC_ARGS = "$GC_ARGS -XX:+PrintGCApplicationStoppedTime "
GC_ARGS = "$GC_ARGS -XX:-OmitStackTraceInFastThrow "
Когда мы запускаем JVM, мы получаем следующую ошибку в нашем журнале
Предупреждение виртуальной машины 64-разрядного сервера Java HotSpot (TM): игнорирование параметра MaxPermSize = 384m; поддержка была удалена в 8.0
MarkStackSizeMax of 5368709120 is invalid; must be between 1 and 2147483646 Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
В чем проблема с MarkStackSize, почему нам нужно уменьшить его до менее 2 ГБ, когда такое же значение 5G работало нормально в JDK1.7?
Кроме того, что такое MarkStackSize, я не смог найти никакой информации о параметре.
Стек маркировки - это структура для обхода графа достижимых объектов на этапе маркировки сборки мусора.
JDK-8000244 добавил проверку диапазона для аргумента MarkStackSizeMax
.
верхний предел теперь (max_jint - 1)
.
Я не могу представить себе случай, когда может потребоваться большее значение, поэтому я предлагаю просто удалить аргумент и позволить JVM выбрать значение по умолчанию. Скорее всего, это все равно не повлияет на производительность.