我如何在外部请求Java垃圾回收,使用JAR启动程序(使用Windows BAT)?
- 从Java代码中,我可以通过
System.gc()
实现。 - 当运行JNLP分发时,在控制面板/ Java / ... 中打开“Java控制台”,该Java控制台提供手动垃圾回收。
但是... 当我从命令行/bat运行jar文件时,似乎没有打开Java控制台。在快速搜索中找不到帮助,请问这里有人能提供帮助吗?
我如何在外部请求Java垃圾回收,使用JAR启动程序(使用Windows BAT)?
System.gc()
实现。但是... 当我从命令行/bat运行jar文件时,似乎没有打开Java控制台。在快速搜索中找不到帮助,请问这里有人能提供帮助吗?
如果您希望纯命令行方式操作,您应该可以使用 jcmd
。我相信自Java 1.7起,jcmd已成为标准JDK安装的一部分。命令类似于这样:
jcmd <process-id> GC.run
您可以通过以下方式获取jcmd为特定进程提供的可用诊断命令列表:jcmd <process-id> help
你可以使用jconsole连接到本地运行的JVM-这在GUI上提供了一个“执行GC”按钮。
当你启动Java进程时,需要指定-Dcom.sun.management.jmxremote。
如果您使用最新的Java 6,您还可以使用jvisualvm来补充和扩展jconsole的功能。它们都是非常有用的工具。
通常情况下,您不应该有任何理由强制执行垃圾回收。这样做会破坏垃圾回收器算法(主要是它们的性能)。在垃圾被收集时,它也会减慢程序的运行速度。如果存在内存问题,您应该使用内存跟踪工具查找引用所在的位置?(是否已注销监听器?)
与其他答案一样,您可以使用jconsole或jvisualvm。您还可以使用JMX以编程方式执行此操作。