2016-10-18 4 views
0

내 응용 프로그램에 Guava 캐시를 사용하고 있으며 maximumSize가 설정되지 않은 경우 기본 동작이 무엇인지 궁금합니다. 최대 크기가 https://github.com/google/guava/wiki/CachesExplained#size-based-eviction에 설명 된대로 설정되면 동작을 이해합니다.Guava 최대 캐시 크기

그러나 maximumSize가 설정되지 않고 JVM의 힙 공간이 부족하면 어떻게됩니까? 나는 가비지 컬렉터가 실행되고 캐시에서 항목이 삭제된다는 것을 의미하는 공간을 확보한다고 가정합니다.

+0

누구든지 이에 대한 아이디어가 있습니까? – user320550

답변

0

Cache은 단지 Map이며 공백 제한이 비슷합니다. Map과 마찬가지로 Integer.MAX_VALUE 개 이상의 항목을 포함 할 수 없으므로 (반환 유형은 size()이므로) 이론 상한 캐쉬 크기는 약 20 억 개입니다. Guava의 awesome element-cost analysis에 관심이있을 수도 있습니다.이 정보에는 다양한 데이터 구조에서 사용되는 정확한 바이트 수가 자세히 나와 있습니다.

실제로 실제 관심사는 캐시의 요소 수 (크기)가 아니라 이 캐시하는 메모리 양 ()입니다. 이것은 캐시의 크기와는 독립적입니다. 단일 캐시 된 객체는 모든 힙을 충분히 소비 할 수 있습니다.

기본적으로 Cache은이 경우 특별한 기능을 수행하지 않으며 JVM이 충돌합니다. 대개의 경우 이것은 원하는 것입니다 - 캐시에서 요소를 자동으로 삭제하면 프로그램의 가정이 손상 될 수 있습니다.

메모리 부족 조건에 접근 할 때 정말로 항목을 삭제하려면 use soft referencesCacheBuilder.softValues()을 사용할 수 있습니다. JVM은 사용 가능한 힙 공간이 부족해질 때 소프트 참조를 가비지 수집하려고 시도합니다. 이 옵션을 최후의 수단으로 만 사용하는 것이 좋습니다. JVM은 소프트 참조를 처리하기 위해 추가 작업을해야하며이를 사용해야 할 때가 종종 다른 방법으로 다른 일을 할 수 있다는 힌트입니다.