WeakHashMap의 key로 Integer나 String을 사용하면 GC가 발생하지 않고 Object를 사용하면 GC가 발생하는지
-> 뭔가... 강한 참조, 약한 참조에 따라 다른것 같은데 찾아봐야함
책에서 나온 예제를 실제 구현해보려고 하면 왜 OOME이 발생하지 않고 정상적으로 실행되는지
-> 뭔가 자바 버전에 따라 다른건지 GC의 버전이 달라서 그런건지 모르겠음
-> 1.8의 경우 Parallel GC, 11은 G1GC
String은 new가 아닌 리터럴 방식으로 생성될 경우 (String a = “abc”; 와 같이) intern()에 의해 String pool을 JVM은 사용하므로 key가 null이 된다고 하도 WeakHashMap은 자동으로 삭제되지 않는다. 이는 Integer 와 같은 Class의 (-127 ~128) 값들도 마찬가지 이다. JVM은 미리 불변 객체로 해당 값을 보관하고 있다.
궁금한 점
WeakHashMap의 key로 Integer나 String을 사용하면 GC가 발생하지 않고 Object를 사용하면 GC가 발생하는지 -> 뭔가... 강한 참조, 약한 참조에 따라 다른것 같은데 찾아봐야함 책에서 나온 예제를 실제 구현해보려고 하면 왜 OOME이 발생하지 않고 정상적으로 실행되는지 -> 뭔가 자바 버전에 따라 다른건지 GC의 버전이 달라서 그런건지 모르겠음 -> 1.8의 경우 Parallel GC, 11은 G1GC