以下のように単純なプログラムのプロファイルを作成したところ、多数の char[] インスタンスが作成されることがわかりました。ここで char[] インスタンスは通常文字列に起因することを読んだので、このプログラムがどのように当てはまるかわかりません。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[] インスタンスも多数あるようです。
このプログラムを使用して、プロファイラーの他のセクションを分離しています。完全なプログラムでは、char[] インスタンスが最大 335,000 に増加します