Подтвердить что ты не робот

Установка размера кучи JVM во время выполнения

Есть ли способ установить размер кучи из запущенной программы Java?

4b9b3361

Ответ 1

Нет.

Что вы можете сделать с приложением с очень сложными требованиями к куче, так это установить максимальный размер кучи с помощью -Xmx и настроить -XX:MaxHeapFreeRatio и -XX:MinHeapFreeRatio, чтобы приложение не зависало на множестве память, когда куча сжимается (это происходит с настройками по умолчанию).

Но обратите внимание, что это может вызвать проблемы с производительностью, когда память, фактически используемая приложением, меняется как сильно, так и быстро - в этом случае вам лучше поддерживать ее во всей памяти, а не возвращать ее только ОС повторить это через секунду. Вы также можете захотеть возиться с GC options, чтобы гарантировать, что GC не оставляет слишком много невостребованных объектов, которые он имеет, как правило, когда есть много места для кучи, чтобы расти, и которая победит цель желать, чтобы размер кучи соответствовал потребностям приложения.

Ответ 2

Согласно http://www.dreamincode.net/forums/showtopic96263.htm, вы не можете сделать это во время выполнения, но вы можете создать другой процесс с разным размером кучи.

Ответ 3

Вы можете настроить эти параметры при запуске приложения, но после того, как JVM будет запущен, эти значения не могут быть изменены. Что-то вроде этого:

java -Xms32m -Xmx512m FooBar

установит минимальный размер кучи до 32 МБ и максимальный размер кучи до 512 МБ. После их установки вы не сможете изменить их в текущей программе.

Ответ 4

Консенсус действительно может заключаться в том, что это невозможно, но мы должны смотреть на источник JVM, чтобы понять, как его можно эргономически контролировать. Было бы очень приятно иметь возможность, чтобы агент JVMTI мог настраивать параметры кучи /perm/tenured/new/ & c в онлайн-режиме/во время выполнения.

Что бы это сделало? это позволит агентам выносить корректировки размера, основанные на целях производительности или занимаемой площади, что будет важно при перемещении JVM в облако.

Ответ 5

Вы можете использовать параметр -mx при запуске (также известный как -Xmx). Это максимальный размер, который вам когда-либо понадобится, в связи с чем вам не нужно установите его больше, чем максимальный размер, который вам когда-либо понадобится.

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

Ответ 6

java -Xmx500m только при запуске

Ответ 7

Я задал один вопрос себе. И в отличие от приведенных выше ответов есть что-то, что я могу сделать в приложении my, увеличивая максимальный размер JVM кучи. Если приложение является веб-сервером в режиме кластера, я могу запустить новый экземпляр с измененным размером min/max heap и, чем выключение начального экземпляра. Это должно быть особенно просто в GlassFish, где у вас есть экземпляр управления, отделяемый от экземпляра nodeAgent (кластерный экземпляр приложения) JVM.

Поскольку многие приложения JVM являются веб-приложениями, я думаю, что стоит сохранить этот блог.

Ответ 8

Если я правильно понял ваш вопрос, вы пытаетесь изменить размер кучи во время выполнения. Я не вижу причин, почему это должно быть возможно. Задайте размер кучи при запуске, используя опцию -Xmx JVM. Я также советую вам установить параметр -Xms, только если вам это абсолютно необходимо. Эта опция устанавливает начальный объем памяти головного устройства, который выделяется для JVM.

Вы должны знать, как ваше приложение ведет себя с точки зрения памяти. Задайте значение -Xmx с умом. Если ваше приложение является своего рода серверным приложением, вы можете установить более высокое значение, в противном случае скомпрометируете свой выбор с помощью других возможных приложений, работающих на клиентских компьютерах и, конечно же, доступной памяти.