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

lea*_*ner 5 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

我已经阅读了这篇文章如何查找堆中的对象数量并尝试使用jvisualvm,但该工具没有给出在我的类中创建的对象的计数。我也不明白如何根据下图获取对象的实际数量。

在此输入图像描述

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

正在附加到进程 ID 15101,请稍候...附加到进程时出错:sun.jvm.hotspot.debugger.DebuggerException:无法附加到进程

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

Pet*_*rey 1

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

在此输入图像描述

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