weakKeys()
/ weakValues()
설정을 사용하면 캐시 Key와 value가 Weak Reference
로 저장되고, 객체 reference가 없으면 JVM GC 대상으로 지정되게 된다.equals()
메소드가 아니고 identity 비교(==
)를 하게 된다.AsyncCache
에서 사용불가LoadingCache<Key, Graph> graphs = Caffeine.newBuilder() .weakKeys() .weakValues() .build(key -> createExpensiveGraph(key));
weakKeys()
를 사용하려면 Key 역할을 하는 객체의 레퍼런스도 캐시하던지 정적 상수로 만들던지 하는 식으로 key 의 값이 동일하면 그 reference도 동일하게 처리해야만한다.
LoadingCache<Key, Graph> graphs = Caffeine.newBuilder() .softValues() .build(key -> createExpensiveGraph(key));
SoftReference
로 GC 대상이 된다.==
) 를 사용한다.SoftReference
가 JVM에서 메모리 상황에 따라 least-recently-used 방식으로 GC 대상으로 지정된다. SoftReference
는 성능에 영향을 줄 수 있어서 명시적으로 캐시 사이즈를 지정하는 것을 권장한다.AsyncCache
에서 사용불가