다음과 같이 간단한 프로그램을 프로파일 링하여 많은 수의 char [] 인스턴스를 생성 할 수 있습니다. 여기서 char [] 인스턴스는 보통 Strings에 기인한다고 읽었으므로이 프로그램의 경우 이것이 어떤지를 알 수 없습니다. Thread 클래스에 char [] 'name'변수가 있다는 것을 알고 있지만 반드시 10,000 개를 생성해야하므로 35,000 개의 추가 스레드가 어디에서 왔는지 궁금합니다.프로그램을 프로파일 링 할 때 많은 char [] 인스턴스가 발생했습니다.
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까지 증가합니다.
스레드 객체는 상당히 무거 우며'char []'를 포함하여 많은 필드를 포함합니다. 많은 스레드를 생성하고 대신 스레드 풀을 사용해서는 안됩니다. – assylias
실행중인 실제 프로그램은이 많은 스레드를 사용하지 않고 다른 것을 테스트하고이 char [] 문제를 발견했습니다. 내가 사용하고있는 구현은 다음과 같다. http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=chameneosredux&lang=java&lang2=java&data=u32 – smur89
'char []' String 당)하지만 큰 볼륨은 아닙니다. –