如何从Shell中强制执行垃圾回收?

135

我正在使用远程jmap查看堆栈,我想在其中强制进行垃圾回收。不使用jvisualvm或jconsole等工具如何实现?

我知道不应该频繁强制进行垃圾回收,而是要找出为什么堆栈会变得如此庞大。

同时我也明白System.GC()并不能真正强制进行垃圾回收,它只是通知垃圾回收器你希望进行回收。

那么是否有一种简单的方法来实现强制进行垃圾回收呢?有没有我遗漏的命令行应用程序?


与https://dev59.com/FXM_5IYBdhLWcg3wNgKY不同。 - Raedwald
12个回答

0

另外:

  • 若要在相同的应用程序、JAR 文件等多个进程中运行 GC,请使用:
jcmd your_application.jar GC.run
  • 在Windows上运行GC,请尝试:
cd C:\"Program Files"\Java\jdk-13.0.2\bin
.\jcmd.exe your_application.jar GC.run
  • MacOS / Linux:
jcmd your_application.jar GC.run
# or
/usr/bin/jcmd your_application.jar GC.run

-16

只是:

kill -SIGQUIT <PID>

5
这将触发堆转储而非垃圾回收。 - Dror Bereznitsky
至少在Solaris上它会进行强制GC。 - Amin Abbaspour
2
即使在Solaris中,SIGQUIT也不会触发GC或堆转储。对于HotSpot,SIGQUIT只会触发线程转储。对于IBM JVM,它是可配置的。 - Mircea Vutcovici
不会触发 GC,只会打印堆栈跟踪。 - Elad Tabak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接