Можно ли изменить/изменить/добавить параметры VM после того, как JVM уже загружен (запущен)? Если да, то как я могу это сделать?
Настройка параметров JVM во время выполнения
Ответ 1
Для свойств, которые вы установили с помощью флага -D
в командной строке, вы хотите System.setProperty. Например:
System.setProperty("propname", "hello world");
// ... later ...
String value = System.getProperty("propname");
Update:
Вы не можете включить отладку динамически, но вы можете включить отладку при запуске, но позже присоедините отладчик. Со следующим вы можете прослушивать порт 12345 и сразу запускать свою программу (через suspend=n
). Затем вы можете прикрепить отладчик, если/когда вам нужно, отделить отладчик, снова подключиться и т.д.
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345
Конечно, это ухудшает производительность даже тогда, когда отладчик не подключен, поэтому он работает только в dev/test code, а не на производстве. Для этого вы хотите вести журнал, например. log4j.
Ответ 2
Короткий ответ заключается в том, что вы не можете изменять параметры VM во время выполнения. Класс Runtime предоставляет некоторые параметры такой максимальной памяти. Основные параметры, такие как максимальная память, должны устанавливаться только с помощью типа администратора, позволяющего управлять ресурсами, когда на машине существует несколько JVM. Если один JVM станет жадным и попросит много и много больше, чем он был назначен, это убьет это ограничение.