我可以从控制台强制运行Java应用程序到Garbage Collect

时间:2013-01-23 08:56:21

标签: java garbage-collection

我可以从控制台强制运行Java应用程序到Garbage Collect吗?

只是为了抢先回复:

  • 我知道我可以用JVisualVM来做,但我只有控制台访问权限 X-Windows访问
  • 我知道System.gc()只请求它不强制的垃圾收集 它,但那似乎是3.工作,所以我正在寻找一种呼唤方式 那个外部。
  • 我知道你不应该垃圾收集正在运行的应用程序,我正在做 这是检查潜在内存泄漏过程的一部分。'
  • 应用程序在生产中运行我无法修改它 envrionment,jvm ecetera

5 个答案:

答案 0 :(得分:2)

如果

,JVisualVM可以连接到远程进程
  • 相关港口已开启
  • 使用正确的参数启动java进程以允许远程连接

所以你不需要在同一台机器上的xWindows环境中发挥魔力......

传递给java的示例或参数

-Dcom.sun.management.jmxremote.port=9005\   
-Dcom.sun.management.jmxremote.authenticate=false\ 
-Dcom.sun.management.jmxremote.ssl=false

答案 1 :(得分:2)

创建一个只执行System.gc()的简单Java代理。 使用其pid附加到目标JVM并运行它。 从这里开始: http://docs.oracle.com/javase/6/docs/jdk/api/attach/spec/com/sun/tools/attach/VirtualMachine.html

答案 2 :(得分:2)

实际上JDK的jmap工具会触发完整的GC。试试jmap histo

答案 3 :(得分:1)

否..您无法强制垃圾收集器执行垃圾回收。使用System.gc(),您只能请求垃圾收集器执行垃圾收集。

答案 4 :(得分:-1)

考虑使用Oracle JRockit JVM运行程序。在那里,您可以使用JRCMD并发出JVM级管理命令/监视,包括强制GC。是的,(在JRockit和其他地方),System.gc()做必然做任何事情