2017-10-05 14 views
0

Google에서는 참조 기반 이탈과 함께 google 구바 캐시를 사용하고 있습니다. 캐시가 꽉 차서 그 요소가 제거 가능하다고 표시되지 않은 경우 어떤 일이 발생했는지 궁금합니다. 메모리 부족 예외가 발생 했습니까?구아바 캐시가 가득 차서 제거 할 수없는 요소가 있다면 어떻게됩니까?

+0

응용 프로그램이 새 객체를 할당 할 수없는 경우 JVM은 결국 'OutOfMemoryError'를 throw합니다. 참조 기반 캐시에는 명시 적 용량 제한이 없으므로 full은 여유 메모리가 없음을 의미합니다. –

+0

Guava의 캐시에는 "evictable"또는 "evictable"이 없습니다. 캐시에 자동 퇴거가 있거나 그렇지 않습니다. 그렇지 않으면 Java의 다른 모든 데이터 구조와 마찬가지로 OutOfMemoryError가 발생합니다. –

답변

0

참조 기반 제거는 기본적으로 Java의 표준 GC 동작과 다르지 않습니다. GC는 캐시의 참조 존재를 무시합니다. 오브젝트가 범위 밖 (캐시가 아닌 모든 곳)으로 떨어지면 GC 중에 캐시에서 제거됩니다. 캐시의 모든 요소가 다른 곳의 스코프에 있고 따라서 GC 할 수없는 경우 캐시를 사용하지 않을 때와 똑같이 메모리 문제가 발생합니다. JVM이 허용하도록 구성된 것보다 많은 데이터를 메모리에 가질 수 없습니다. 참조를 비우는 캐시를 사용해도 변경되지 않습니다.