如何检查堆内存中创建的对象数?

时间:2015-09-22 13:51:03

标签: java memory

我希望在运行程序时看到Java创建了多少个对象。

我的意图是如果我使用代码String s = new String("Hi");我想看看Java将创建多少个对象。后来我想试试String news = "Hi";

这是我的示例程序:

import java.util.Scanner;

public class Test { 
    public static void main(String[] args) {
        String str = new String("Hi");
        Scanner s = new Scanner(System.in);
        s.nextLine();
    }
}

我使用Scanner只是为了避免程序终止。

我已经浏览了这篇帖子How to find the number of objects in the heap,并尝试使用jvisualvm,但该工具并未提供我班级中创建的对象的计数。我也不明白如何根据下图获得实际的物体数量。

enter image description here

当我尝试使用命令jmap -heap <pid>时,我得到以下错误:

  

附加到处理ID 15101,请稍候...附加到的错误   进程:sun.jvm.hotspot.debugger.DebuggerException:无法附加到   过程

如果我使用eclipse Debug作为选项,那么我发现找出正在创建的对象数量的方法不正确。

2 个答案:

答案 0 :(得分:1)

如果查看调试器,可以看到

enter image description here

String@437对象在s1 s2 s3中是相同的,但这指的是char[2]@438,它是另一个对象。因此,你有两个对象。

答案 1 :(得分:-1)

2017年版的Intellij创意在调试器页面中有一个名为“内存视图”的窗口。