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

Как запросить сбор мусора JVM (не из кода) при запуске из командной строки Windows

Как я могу запросить сборку мусора Java извне, начиная программу из JAR (используемая Windows BAT)?

  • Из кода Java я могу сделать это с помощью System.gc()
  • При запуске дистрибутива JNLP я получаю эту "консоль Java" от панели управления /Java/... и эта консоль Java предоставляет ручную сборку мусора.

Но... Когда я запускаю банку из командной строки /bat, консоль java не открывается. Не удалось найти помощь с кратким поиском, возможно, кем-то здесь?

4b9b3361

Ответ 1

Вы можете использовать jconsole для подключения к JVM, работающему локально. Это обеспечивает кнопку "Выполнять GC" в графическом интерфейсе.

При запуске java-процесса вам нужно указать -Dcom.sun.management.jmxremote.

Ответ 2

Если вы используете самую последнюю версию java 6, у вас также есть jvisualvm, который дополняет и расширяет функциональность jconsole. Они оба очень полезны.

Ответ 3

Для чисто командной строки вы должны использовать jcmd. Я считаю, что jcmd был частью стандартной установки JDK с по крайней мере Java 1.7. Команда будет примерно такой:

jcmd <process-id> GC.run

Вы можете получить список доступных диагностических команд, которые jcmd предоставляет для определенного процесса следующим образом:

jcmd <process-id> help

Ответ 4

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

Как и в других ответах, вы можете использовать jconsole или jvisualvm. Вы также можете использовать jmx для программного программирования.