I 코드의 다음 조각이 : 나는 위의 코드를 실행하면자바 가비지 컬렉션 (Garbage Collection) 및 널 (null)
List<String> list = new ArrayList<String>();
// WeakReference<List> wr = new WeakReference<List>(list);
System.out.println(" before tot memory... " + Runtime.getRuntime().totalMemory());
System.out.println(" before free memory... " + Runtime.getRuntime().freeMemory());
for(int i =0; i<100; i++)
list.add(new String("hello"));
//System.gc();
list = null; //forcefully end its life expectancy
System.out.println(" after tot memory... " + Runtime.getRuntime().totalMemory());
System.out.println(" after free memory... " + Runtime.getRuntime().freeMemory());
System.out.println(" after memory used ... " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
// System.out.println(" weak reference " + wr.get());
, 나는 가능한 메모리를 볼 수는 (내 시스템 그러나이 값이 다를 수 있음)
361064입니다그러나 System.gc() 및 comment list = null로 위의 코드를 실행할 때 위의 테스트 케이스보다 적은 여유 메모리 (이 경우 160944)가 표시 될 수 있습니다. 두 시나리오 모두에서 개체가 메모리에서 제거됩니다. 그러나 이러한 값이 다른 이유는 무엇입니까?
'new String ("hello")'는 두 개의 객체를 생성합니다. 이 constructor은 결코 사용하지 말아주세요. 보십시오'list.add ("hello")' –
@ajozwik 나는 결코 '말하지 않을 것입니다. 그것을위한 유즈 케이스가있다. 그것이 존재하는 이유입니다. – EJP