2013-12-23 4 views
6

Параметры виртуальной машины Java:Почему общая зарезервированная память JVM больше -Xmx?

-Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8

Как и ожидалось, JVM выделит почти 20 Мб памяти для виртуальной машины Java кучи.

Но смотрите следующий GC деталь:

PSYoungGen Всего 9216K, использовали 4612K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)
Иден пространство 8192K, 56% использовали [0x00000000ff600000,0x00000000ffa812d8,0x00000000ffe00000)
из космоса 1024К, 0% использовали [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
к ей Темп 1024К, 0% использовали [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)
PSOldGen общая 10240K, использовали 8192K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)
космический объект 10240K, 80% использовали [0x00000000fec00000,0x00000000ff400020,0x00000000ff600000) PSPermGen общая 21248K, используется 3033K [0x00000000f9a00000, 0x00000000faec0000, 0x00000000fec00000)
пространства объектов 21248K, 14% использовали [0x00000000f9a00000,0x00000000f9cf6708,0x00000000faec0000)

размер молодое поколение как и ожидалось для опции -Xmn. Соотношение размеров для эденское пространство и оставшиеся в живых места в молодое поколение как и ожидалось для опции -XX:SurvivorRatio=8. Но кажется, что в общей сложности JVM выделяет почти 40 МБ памяти, так что это странно. Почему общая распределенная память JVM превышает -Xmx?

ENV:

ОС: Win7 64 бит

JDK: построить 1.6.0_43-b01 64-разрядные

ответ

11

-Xmx устанавливает максимальный размер HotSpot Объектно-кучи, то есть сумма YoungGen (Eden + Survivor-spaces) и OldGen, что составляет около 20 МБ. Постоянное поколение находится за пределами этой кучи в отдельной области памяти, которая управляется с помощью опции -XX:MaxPermSize.

+0

так что куча делится на два поколения: YoungGen и OldGen, не содержит PermGen? –

+0

@LipingHuang Да, это правильно. Куча разделена на * молодое поколение *, 'PSYoungGen' и * old generation *,' PSOldGen'. Куча не содержит * постоянного поколения *, 'PSPermGen'. Кстати, 'PS' означает * параллельный сборщик уловителей * (включен с использованием' -XX: UseParallelGC'). – DontDivideByZero

+0

@LipingHuang * молодое поколение * далее делится на * пространство eden * и два * места для спасения *, известные как * из пространства * и * в космос *.Однако ** только одно из * оставшихся в живых мест * вносит свой вклад в указанный размер * молодого поколения ***, как обсуждалось [здесь] (http://stackoverflow.com/q/28347161/3460717). – DontDivideByZero

Смежные вопросы