我有一个Tomcat Java webapp,它在负载下会颠覆Java GC。我认为这是由于大量短期对象与未知数量的中等长期对象的结合。
为了验证该理论,我想找到一种工具,该工具可以确定所有分配的对象(或每10个对象等,以提高性能)的对象生存期。理想情况下,最终输出将是直方图,该直方图显示在不同时间段内生存的对象的相对数量。
我认为该工具可能会基于Instrumentation API或JVMTI构建。如果还没有好的工具可以做到这一点,那么我将不胜感激有关编写此类工具时最好使用哪个JVM接口的建议。
最佳答案
我现在已经开始编写工具来完成我最初要求的工作。当前代码可以在这里找到:
http://wiki.github.com/mchr3k/org.inmemprofiler/
到目前为止,我已经设法通过实例计数获得了所有对象分配的文本直方图。这不包括以不同方式处理的数组分配。
我现在正在使用JVMTI来添加实例大小信息以及跟踪数组分配。