使用jvisualvm进行内存采样

时间:2013-01-21 04:15:23

标签: profiling visualvm sampling memory-profiling

我正在使用Java Visual VM的内存采样功能,我无法回答这些问题:

  1. 为什么创建了这么多实例?

  2. 为什么这些实例和字节数会不断增加?

  3. 例如,我创建了一个非常简单的Java程序,如下所示:

    public class TestMemory{
        public static void main(String[] args) throws InterruptedException {
            System.out.println("Hello");
            Thread.sleep(60 * 60 * 1000);
        }
    } 
    

    我可以在Java Visual VM中看到有611个类。实例数量从25,000增加到接近50,000,然后回落到25,000左右。实例减少的原因可能是由GC引起的,但我不知道为什么这些数字是如此动态,即使我没有对我的程序做任何事情。

1 个答案:

答案 0 :(得分:4)

您正在查看的实例数和字节数为cost of monitoring an app from VisualVM。 VisualVM正在轮询各种JVM MBean,不断分析应用程序的价值变化。

要确认这一点,您可以转到采样器标签。单击每个线程分配子选项卡。查看忙线程是否为RMI TCP连接(n)。该线程每秒应具有高字节分配。

我很好奇如何优化这一点,因此发布了更具体的question