Как исправить размер кучи Java - PullRequest
1 голос
/ 11 марта 2009

Я знаю, что Java VM имеет «-XMx» и «-XMs» для установки размера кучи. Он также имеет функцию под названием «эргономика», которая может разумно регулировать размер кучи. Но у меня есть проблема под рукой, требующая кучи строго фиксированного размера.

Вот аргументы командной строки:

"-Xms2m -Xmx2m -XX:+PrintGCDetails"

Однако, наблюдая журналы GC, кажется, что размер кучи не был зафиксирован на 2048K. Смотрите, например 2368К, 2432К, 2176К и т.д .:

[GC [PSYoungGen: 480K->72K(704K)] 1740K->1332K(2368K), 0.0032190 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
[GC [PSYoungGen: 560K->64K(768K)] 2094K->1598K(2432K), 0.0033090 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
[GC [PSYoungGen: 544K->32K(768K)] 1675K->1179K(2176K), 0.0009960 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

Есть ли способ сделать " строгий sizing " (не больше, не меньше) кучи Java?

Ответы [ 5 ]

4 голосов
/ 11 марта 2009

Я считаю, что JVM будет управлять кучей так, как вы намереваетесь, но проблема в вашем примере заключается в том, что максимальный размер кучи игнорируется как слишком низкий.

В Sun JVM для Windows версии 1.6.0_06 я считаю, что минимальный «максимальный размер кучи» составляет приблизительно 6 МБ (т.е. -Xmx6m). Если вы попытаетесь установить параметр ниже, тогда эта куча может фактически увеличиться. (Я думал, что минимум составляет 16 м, но небольшой эксперимент показывает, что значения до 6 м, похоже, работают.)

Однако, если вы установите -Xms8m и -Xmx8m, я думаю, вы обнаружите, что куча остается в этом размере.

0 голосов
/ 19 мая 2009

Когда я впервые прочитал, что я думал, что сказал 2 ГБ;)

Не забывайте, что в Java используется как минимум 10–30 МБ пространства без кучи, поэтому сэкономленные несколько сотен К могут не иметь такого большого значения, как вы думаете.

0 голосов
/ 19 мая 2009

Я думаю, это слишком мало. Попробуйте что-нибудь выше, например, 16м или 64м. Дополнительно внутренний и внешний размер - это разные туфли. Куча не будет заполнена постоянно, поэтому всегда возможно меньше Xmx, даже меньше Xms в случае, если программа только что была запущена Но внешне вы увидите, что объем памяти Xms выделен.

0 голосов
/ 11 марта 2009

Существуют и другие параметры, кроме -Xmx и -Xms, которые определяют начальный размер кучи. Подробности см. В руководстве по настройке jvm .

0 голосов
/ 11 марта 2009

Насколько я знаю, это невозможно при использовании стандартной виртуальной машины. К сожалению, сейчас у меня нет ссылок.

...