2010-07-15 53 views
1

我有一个Tomcat Java web应用程序,它在加载时抖动Java GC。我认为这是由于大量短寿命物体和未知数量的中等寿命物体的组合。如何生成Java对象生存期的直方图

为了验证这个理论,我想找到一个工具,它可以让我确定所有分配的对象(或每10个对象等的更好性能)的对象生存期。理想情况下,最终输出将是一个直方图,显示生活在不同时间量的对象的相对数量。

我认为这个工具可能会构建在Instrumentation API或JVMTI之上。如果没有好的工具已经这样做了,那么我也会很高兴在编写这样一个工具时最好使用哪个JVM的接口。

+0

您是否尝试过JMX + VisualVM?还是探针? – 2010-07-15 18:46:45

+0

也在代码上运行静态代码分析器。这可能会指出一些关切的领域。 – 2010-07-15 18:50:29

+0

一个不错的免费分析器是Eclipse内存分析器(您不必安装Eclipse)。 重新启动应用程序后,它表现良好一段时间还是它开始跳出门?后者可能表明你只是没有足够的内存可用。 – Preston 2010-07-15 19:44:34

回答

0

我现在已经开始编写一个工具来完成我最初询问的内容。当前的代码可以在这里找到:

http://wiki.github.com/mchr3k/org.inmemprofiler/

到目前为止,我已经设法通过实例计数的所有对象分配的文本直方图。这不包括处理不同的数组分配。

我现在正在通过使用JVMTI来追加实例大小信息以及跟踪数组分配。

+0

此工具现在可以跟踪对象大小和分配轨迹。 – mchr 2010-08-28 18:50:16