我可以强制运行Java应用程序从垃圾收集从控制台?我可以强制运行Java应用程序从控制台垃圾收集
只是为了抢占一些回复:
- 我知道我可以JVisualVM做,但我只有控制台访问不 X-Windows访问
- 我知道的System.gc()只要求垃圾收集它并没有强制 它,但那似乎3.工作,所以我寻找一种方式呼吁 externaly。
- 我知道你不应该垃圾收集工作应用程序,我做 这是检查潜在内存泄漏的过程的一部分。
- 应用在生产中runinng我不能修改其 管环境,JVM ecetera
我可以强制运行Java应用程序从垃圾收集从控制台?我可以强制运行Java应用程序从控制台垃圾收集
只是为了抢占一些回复:
JVisualVM可以连接到远程进程,如果
所以你并不需要在在同一台机器上的xWindows环境使魔法发生...
示例或参数传递给java
-Dcom.sun.management.jmxremote.port=9005\
-Dcom.sun.management.jmxremote.authenticate=false\
-Dcom.sun.management.jmxremote.ssl=false
号。你不能强迫垃圾收集器执行垃圾收集。使用System.gc(),您只能请求垃圾回收器执行垃圾回收。
你显然没有读过我的第二点。 –
创建一个只执行System.gc()的简单Java代理。 使用其pid附加到目标JVM并运行它。 从这里开始: http://docs.oracle.com/javase/6/docs/jdk/api/attach/spec/com/sun/tools/attach/VirtualMachine.html
Thankyou实际上试图回答我的问题,但是在jdk中是否存在这样的程序,而不是我必须写我自己的? –
实际上,来自JDK的jmap工具将触发完整的GC。试试jmap histo
在我们的JVM上,它似乎只有在运行jmap histo时才会触发完整的GC:live。 –
你有没有看到这个? http://stackoverflow.com/questions/1481178/forcing-garbage-collection-in-java –
要检查潜在的内存泄漏,您还必须查看收集后使用了多少内存。对于这个VisualVM是最简单的,所以使用它。 –
[Duplicate](http://stackoverflow.com/questions/3523837/how-do-you-force-garbage-collection-from-the-shell)详细介绍了如何做到这一点。 –