我对POJO的内存使用量和实例数量进行采样。如果我在视觉vm中按“垃圾收集”并且我可以看到实例,这是否意味着它的内存泄漏?
如何强制jvm每天在中途做垃圾收集? (就像在visualvm上自动按垃圾收集一样)?我看到visualvm的cpu用法,gc总是0%。我设置-xmx -xms 1024m,但通常内存使用量约为200mb。这是因为GC只在必要时才完成?这就是gc cpu time总是0%的原因
如何检查上次执行'完整GC'的时间?
答案 0 :(得分:6)
System.gc()
,它是JVM的提示,它现在可能要运行GC。它不需要做任何事情,并且该方法的无操作实现将是完全有效的。基本上,垃圾收集“只是发生”,你对它的特定期望越少越好。所以基本上,是的,它通常只在需要时运行。-verbose:gc
将详细的垃圾回收详细信息输出到控制台。如果要以编程方式或可视方式检查详细信息,也可以通过JMX公开此信息(即set up your process to use JMX remoting,并使用JConsole连接到它)。对我来说,使用Sun的1.5.0_06 JVM,我在java.lang.GarbageCollector中看到一个MBean,它公开了一些信息,包括上一次完整GC的时间。答案 1 :(得分:1)
没有。没有确切的具体方法来确定您的应用程序是否内存泄漏。最好是在较长时间内进行浸泡测试,并确保活堆的大小稳定。
您可以使用System.gc()
方法调用来运行垃圾收集器。
似乎没有用于上次运行GC的API,但GarbageCollectorMXBean可以提供有关GC的一些统计信息。