2009-03-10 3 views
1

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

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

"-Xms2m -Xmx2m -XX:+PrintGCDetails" 

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

[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] 

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

ответ

-1

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

+0

Спасибо, Ян. Если нет простого выхода, мне придется копать исходный код. – peng

0

Есть другие варианты наряду с -Xmx и -Xms, которые определяют начальный размер кучи. Подробнее см. Jvm tuning guide.

4

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

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

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

0

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

0

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

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

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