Как запросить сборку мусора JVM (не из кода) при запуске из командной строки Windows - PullRequest
14 голосов
/ 15 апреля 2009

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

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

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

Ответы [ 4 ]

9 голосов
/ 15 апреля 2009

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

Вам нужно будет указать -Dcom.sun.management.jmxremote при запуске процесса Java.

8 голосов
/ 29 марта 2016

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

jcmd <process-id> GC.run

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

jcmd <process-id> help
5 голосов
/ 15 апреля 2009

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

1 голос
/ 15 апреля 2009

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

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

...