代码之家  ›  专栏  ›  技术社区  ›  jbindel

是否有一个可以在正在运行的JVM上执行垃圾收集的Java Java工具?

  •  1
  • jbindel  · 技术社区  · 14 年前

    在运行的JVM上使用 jconsole jvisualvm 与JDK一起提供的工具,能够使用 jstat 在远程shell访问但没有x11访问或RMI访问的系统上的命令。

    但是,我在JDK中没有找到任何工具可以让我在运行的进程上执行垃圾收集,我可以在没有显示环境的情况下从ssh会话调用该进程。

    JDK中真的没有这样的命令行工具,但只有具有“执行gc”按钮的GUI工具,还是我遗漏了什么?

    编辑:我知道我可以写这样一个工具。是的,我知道JVM在需要的时候做GC,所以重复这个咒语对任何事情都没有帮助。应用程序运行良好,我只是想戳一下它,看看它使用了多少内存,而不需要离线(不重新启动现有的JVM),也不需要在运行它的环境中部署一些新代码,因为这不是我近期能做的事情。像这样做调查是一个很大的原因 J控制台 合资汽车 这将在您单击GUI按钮时执行GC,但最好不要尝试跳过X转发循环来执行一个简单的任务。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Barend    14 年前

    您可以创建一个简单的非GUI Java应用程序,或者Scala/JRuBy/Jython/Groovy/任何脚本,以建立JMX到JVM的连接( server VM configuration , sample client code )用它来呼叫 gc() 操作 java.lang:type=Memory 命令行中的MBean(假定为Sun/OracleJVM)。您可以使用相同的机制从其他一些MBean中检索内存使用信息。

        2
  •  0
  •   a_horse_with_no_name    14 年前

    不需要这样的工具。

    JVM将知道何时进行垃圾收集,没有理由“从外部”启动收集。