我可以检测垃圾收集器何时工作?

时间:2009-07-16 05:55:18

标签: swing java garbage-collection

正在开发应用程序。 经过半小时的使用后,我会慢慢体验。

可以因为GC运行吗?

如何找到垃圾收集器何时运行任何jdk 1.5命令行选项?

由于

7 个答案:

答案 0 :(得分:8)

当您使用-XX:+ PrintGC启动Java时,它会在垃圾收集时打印消息。

答案 1 :(得分:6)

您可以使用jconsole.exe,它可以在您的jdk的bin目录中找到。它向您展示了有关运行JVM的大量详细信息。

答案 2 :(得分:4)

GC极不可能导致可观察到的问题。曾几何时,Java有一个非常缓慢的GC,它给它带来了近乎永久的坏名声。那个时间已经过去了。

缓慢到底是什么?即使对于罕见的完整收集过程,GC也应该永远不会超过几分之一秒。

编辑:即使GC 运行可测量的数量,它也可能只是问题的症状。无论什么代码在GC上放置那么多需求都会导致内部比GC更慢。

答案 3 :(得分:2)

我强烈怀疑这是你看到的GC。正如280Z28指出的那样,GC通常运行速度非常快(但如果你做错了什么,它仍会扼杀性能)。你在那个时候使用该程序吗?如果没有,也许你的内存有点低,它被分页了? (让Eclipse运行的时间超过半天而不使用它会导致我无法使用它的状态。在内存很少的系统上可能会更早发生。)

答案 4 :(得分:2)

如果您使用最新的JDK,最简单的方法是使用jvisualvm,它允许您附加到正在运行的进程。然后,您可以根据需要查看垃圾收集,内存使用和配置文件。 (它本质上是相应的NetBeans功能,可作为JDK中的独立应用程序使用)。

它补充和增强了jconsole!

(但你所描述的可能是程序内存泄漏导致GC过多。使用jvisualvm搞清楚)

答案 5 :(得分:1)

GC本身可能不是问题所在。但是,如果您有内存泄漏,可能会导致GC使用所有CPU尝试清除内存。

答案 6 :(得分:0)

正如大家之前提到的,GC几乎肯定不是问题所在。

我尝试使用YJP(您的Java Profiler,免费使用30天)来分析您的应用程序并找出正在放慢速度的内容。内存泄漏是一个非常可能的原因。