如何从Windows命令行运行时请求JVM垃圾回收(而不是从代码)

如何从外部请求Java垃圾回收,从JAR(使用Windows BAT)启动程序?

  • 从Java代码我可以用System.gc()
  • 运行JNLP分发时,我从控制面板/ Java / …中打开了这个“Java控制台”,而这个Java控制台提供了手动垃圾收集。

但是…当我从命令行/蝙蝠运行jar时,java控制台似乎并没有打开。 简单的search引擎找不到帮助,也许有人在这里?

您可以使用jconsole连接到本地运行的JVM – 这在GUI上提供了“Perform GC”按钮。

在启动Java进程时,您需要指定-Dcom.sun.management.jmxremote

如果你使用最新的Java 6,你也有jvisualvm补充和扩展jconsole的功能。 他们都是非常有用的工具。

对于纯粹的命令行方式,您应该可以使用jcmd 。 我相信自从至少Java 1.7以来,jcmd已经成为标准JDK安装的一部分。 该命令将是这样的:

 jcmd <process-id> GC.run 

您可以获得jcmd为特定进程提供的诊断命令列表,如下所示:

 jcmd <process-id> help 

您通常不应有任何理由强制垃圾收集。 这样做,弄乱了垃圾收集器算法(主要是他们的性能)。 垃圾收集的同时,也会减慢程序的速度。 如果有内存问题,你应该使用内存跟踪工具来找出引用被保存在哪里? (听众是否注册?)

正如在其他的答案,你可以使用jconsole或jvisualvm。 您也可以使用jmx以编程方式执行它。