64-битный Java 1.7 игнорирует флаг минимального размера кучи? - PullRequest
0 голосов
/ 16 марта 2012

java -Xms, по-видимому, не влияет на количество памяти, которое java-процесс потребляет во время выполнения.

У меня есть приложение, которое потребляет около 1 ГБ с системной точки зрения.Я попытался установить -Xms2048m (и -Xmx4096m), и я не вижу абсолютно никаких изменений в потреблении памяти.

В документах по горячей точке утверждается, что размер кучи ограничен значением Xms или значением по умолчанию.

Единственное, о чем я могу думать, - возможно, процесс не может захватить непрерывный блок памяти, поэтому он захватил все, что мог, и затем выделил бы больше позже, или, возможно, окна не позволяют ему иметь столько памяти для начала.(64-битные окна 7)

(мне это ни для чего не нужно, это просто что-то любопытное, что я заметил)

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Диспетчер задач окон по умолчанию для использования памяти показывает, что это не то, что выделено в пространстве виртуальной памяти процессов. Это то, сколько этот процесс фактически записал в виртуальное пространство, которое должно было отображаться в реальную память. Если вы включите в диспетчере задач столбец «Фиксировать размер», который будет показывать то, что на самом деле считается «использованным» с точки зрения виртуального адресного пространства ваших процессов. (примерно Xms + permsize + размер виртуальной машины и самого системного содержимого.)

1 голос
/ 19 апреля 2012

Для Java 1 попробуйте с -ms и -mx

Начиная с Java2 вы можете использовать -Xms и -Xmx

Мой опыт показывает, что -ms и `-mx работают также в Java2. Смотри http://www.devx.com/tips/Tip/5578

0 голосов
/ 16 марта 2012

JVM нужна непрерывная область памяти для кучи.Это означает, что он выделяет максимальный размер виртуальной памяти при запуске.Это не так плохо, как звучит, поскольку ОС выделяет основную память только приложению, как оно ее использует (а не когда выделяет виртуальную память)

Если посмотреть на объем памяти, используемый в таком инструменте, какVisualVM, вы можете обнаружить, что даже с объемом служебной информации 150 - 500 МБ, размер меньше, чем минимальный размер.Это связано с тем, что Java не просто использует минимальный размер, если она не используется для него.

Вместо этого минимальный размер - это точка, ниже которой он предпринимает лишь незначительные попытки очистки памяти.(Вы можете видеть, что он выполняет незначительные сборы мусора) В большинстве случаев это означает, что приложение будет использовать минимальный размер очень быстро.Тем не менее, программа "hello world" не будет использовать минимальный размер.

возможно, windows не позволяет иметь столько памяти для запуска с

Сбой JVMначать, если он не может выделить максимальный размер как непрерывный блок.(Это было распространенной проблемой в 32-битном окне, так что ограничение могло составлять 1,5 ГБ или всего 1,2 ГБ)

...