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

Swing 我可以检测垃圾收集器何时工作吗?,swing,java,garbage-collection,Swing,Java,Garbage Collection,我正在开发一个swing应用程序。 连续使用半小时后,我会体验到缓慢 因为GC正在运行,它是否可以运行 当垃圾收集器运行任何JDK1.5命令行选项时,我如何找到它 谢谢您可以使用jconsole.exe,它可以在jdk的bin目录中找到。它向您展示了有关运行JVM的许多详细信息。当您使用-XX:+PrintGC启动Java时,它将在垃圾收集时打印消息。GC不太可能导致可观察到的问题。很久以前,Java有一个非常慢的GC,这给了它几乎永久的坏名声。那个时代已经过去了 速度到底有多慢?一个GC实际上

我正在开发一个swing应用程序。 连续使用半小时后,我会体验到缓慢

因为GC正在运行,它是否可以运行

当垃圾收集器运行任何JDK1.5命令行选项时,我如何找到它


谢谢

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

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

GC不太可能导致可观察到的问题。很久以前,Java有一个非常慢的GC,这给了它几乎永久的坏名声。那个时代已经过去了

速度到底有多慢?一个GC实际上不应该花费超过几分之一秒的时间,即使对于罕见的完整收集过程也是如此


编辑:即使GC正在运行一个可测量的量,它也可能只是问题的一个症状。无论什么代码对GC提出如此高的要求,都会在内部导致比GC更慢的速度。

我强烈怀疑您看到的是GC。正如所指出的,GC通常运行得非常快(尽管如果您做错了什么,它仍然会降低性能)。那时候你在用这个程序吗?如果不是,也许你的内存有点不足,它被调出了?(让Eclipse运行超过半天而不使用它会导致我无法再使用它。在内存很少的系统上,这种情况可能会更快发生)。

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

它补充并增强了jconsole


(但您所描述的可能是由于程序内存泄漏导致的过度GC。请使用jvisualvm来解决)

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

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


我会尝试一些类似(您的Java Profiler,免费30天)的东西来评测您的应用程序,并找出什么在放缓。内存泄漏是一个很可能的原因

jconsole为+1。您将看到内存使用情况的锯齿图,显示GC何时启动。如果愿意,您甚至可以触发手动GC。我怀疑你会发现这是一个GC rlated。这只适用于小型应用程序,这里可能就是这种情况。一旦您扩大内存使用,GC就很容易成为一个问题。在大多数情况下,垃圾收集的数量更多地取决于单个GC所需的时间。如果你说的“小”是指少于一两个gig,那么可能?这看起来像是内存泄漏的症状(在java中有时很难跟踪)