Настройка параметров JVM во время выполнения - PullRequest
23 голосов
/ 18 ноября 2009

Можно ли изменить / изменить / добавить параметры виртуальной машины после того, как JVM уже загружена (работает)? Если так, как я могу это сделать?

Ответы [ 2 ]

38 голосов
/ 18 ноября 2009

Для свойств, которые вы устанавливаете с помощью флага -D в командной строке, вы хотите System.setProperty . Например:

System.setProperty("propname", "hello world");

// ... later ...
String value = System.getProperty("propname");

Обновление:

Вы не можете включить динамическую отладку, но вы можете включить отладку при запуске, но позже присоедините отладчик. С помощью следующего вы можете прослушивать порт 12345 и сразу же запустить свою программу (через suspend=n). Затем вы можете присоединить отладчик, если / когда вам нужно, отсоединить отладчик, подключить позже и т. Д.

-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345

Конечно, это снижает производительность, даже если отладчик не подключен, поэтому он хорошо работает только в коде dev / test, а не в рабочей среде. Для этого вы хотите войти, например, log4j .

4 голосов
/ 18 ноября 2009

Короткий ответ: вы не можете изменять параметры виртуальной машины во время выполнения. Класс Runtime предоставляет некоторые параметры, такие как максимальный объем памяти. Основные параметры, такие как максимальная память, должны устанавливаться только типом администратора, позволяющим управлять ресурсами, когда на компьютере одновременно существует несколько JVM. Разрешение одной JVM стать жадным и запрашивать много и много больше, чем было выделено, убило бы это ограничение.

...