Можем ли мы ограничить память приложения Java изнутри приложения Java?

StackOverflow https://stackoverflow.com/questions/19855486

Вопрос

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

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

Это было полезно?

Решение

Мой первый вопрос должен быть, почему вы настраиваете его вообще? Сервер JVM устанавливает максимум до 1/4 основного размера памяти, и это разумно для большинства приложений. Вы можете изменить это, создав свой собственный JVM, или вы можете создать псевдоним, как

alias java="java -Xmx30g"

То, что вы можете сделать, это периодически проверять использование памяти и убивать процесс, если вы используете больше. Это очень плохая идея, конечно.

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

Вы не можете изменить его, поскольку он оставляет максимальный размер памяти при запуске.

Кстати, существует распространенное заблуждение, что куча - единственная память, которая имеет значение. Это не так, как JVM, стеки потоков, собственная память и т. Д. Используют некоторую память, так что вы, куча и куча составляет 100 МБ, но JVM может использовать 300 МБ.

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top