java-get-together / effective-java

이펙티브 자바 스터디
0 stars 0 forks source link

[Item 07] 다 쓴 객체 참조를 해제하라 #18

Open jaejlf opened 2 weeks ago

jaejlf commented 2 weeks ago
jaejlf commented 2 weeks ago

p.38 WeakHashMap을 사용해 캐시를 만들자.

String이 key인 WeakHashMap 캐시 만들 때 주의가 필요함.


// 1. map1 : 문자열 객체로 캐시 key 생성 String str1 = new String("문자열 객체 Key"); map1.put(str1, new Object());

// 2. map2 : 문자열 리터럴로 캐시 key 생성 String str2 = "문자열 리터럴 Key"; map2.put(str2, new Object());

// 3. 캐시(map) 사이즈 확인 System.out.println(map1.size()); // 출력 결과 : 1 System.out.println(map2.size()); // 출력 결과 : 1

// 4. 캐시 key의 참조 해제 str1 = null; str2 = null;

// 5. GC 수행 System.gc(); Thread.sleep(5000);

// 6. 캐시(map) 사이즈 확인 System.out.println(map1.size()); // 출력 결과 : 0 System.out.println(map2.size()); // 출력 결과 : 1 (문자열 리터럴로 key가 생성된 캐시는 삭제 안됨!)

jaejlf commented 2 weeks ago

cf. 멀티 스레딩 환경에서의 메모리 가시성 문제

@YOUJI2