分析程序时有大量char []实例

时间:2013-07-23 11:31:44

标签: java performance char profiling jprofiler

我已经分析了一个简单的程序,如下所示,发现了大量的char []实例。在这里读到char []实例通常归因于Strings,我不知道这个程序是怎么回事。我知道在Thread类中有一个char []'name'变量,但是肯定这应该只创建10,000个,所以我想知道额外的35,000个线程来自哪里?

public class untitled {
    public static void main(String args[]){
        ArrayList<Thread> a = new ArrayList<Thread>();
        for(int i = 0; i < 10000; i++){
            Thread t1 = new Thread();
            a.add(t1);
            t1.start();
        }
    }
}

以下是分析内存结果的屏幕截图。似乎还有一些String []实例。

enter image description here

我正在使用此程序来隔离探查器的其他部分。在完整程序中,char []实例增加到~335,000

1 个答案:

答案 0 :(得分:0)

您必须使用堆walker来回答这个问题。在堆walker的classes视图中选择char[]类,然后创建一个新的对象集。然后转到引用视图并从视图选择器中选择“累积的传入引用”。

enter image description here

答案是大约三分之一的char []对象属于JVM中各种类分配的字符串,三分之二来自线程名称。