jProfiler 实时内存所有对象视图

jProfiler Live Memory All object view

我创建了以下简单程序,只是为了在 java 中创建字符串列表时观察对象和内存信息。

进口java.util.ArrayList; 导入 java.util.List;

public class Main {

    public static void main(String[] args) {

        List<String> strObj = new ArrayList<String>();

        for (int i = 0; i < 1000; i++) {
            strObj.add("abc");
        }
    }
}

但是 jProfiler 在 Live Memory -> All Object 视图中显示了以下信息,我无法理解。

创建了多少个char[]实例?我只创建了 1000 个字符串对象,怎么创建了大约 9000 个?

请帮助我解释此探查器信息。

动态内存视图无法回答这个问题。您必须转到堆 walker 和 select 所有 char[] 个实例。然后查看"Cumulated incoming references"视图来分析实例是如何被引用的。

您还可以在启动时使用适当的记录配置文件打开分配记录,然后您可以看到它们的分配位置。