Cache
은 단지 Map
이며 공백 제한이 비슷합니다. Map
과 마찬가지로 Integer.MAX_VALUE
개 이상의 항목을 포함 할 수 없으므로 (반환 유형은 size()
이므로) 이론 상한 캐쉬 크기는 약 20 억 개입니다. Guava의 awesome element-cost analysis에 관심이있을 수도 있습니다.이 정보에는 다양한 데이터 구조에서 사용되는 정확한 바이트 수가 자세히 나와 있습니다.
실제로 실제 관심사는 캐시의 요소 수 (크기)가 아니라 이 캐시하는 메모리 양 ()입니다. 이것은 캐시의 크기와는 독립적입니다. 단일 캐시 된 객체는 모든 힙을 충분히 소비 할 수 있습니다.
기본적으로 Cache
은이 경우 특별한 기능을 수행하지 않으며 JVM이 충돌합니다. 대개의 경우 이것은 원하는 것입니다 - 캐시에서 요소를 자동으로 삭제하면 프로그램의 가정이 손상 될 수 있습니다.
메모리 부족 조건에 접근 할 때 정말로 항목을 삭제하려면 use soft references과 CacheBuilder.softValues()
을 사용할 수 있습니다. JVM은 사용 가능한 힙 공간이 부족해질 때 소프트 참조를 가비지 수집하려고 시도합니다. 이 옵션을 최후의 수단으로 만 사용하는 것이 좋습니다. JVM은 소프트 참조를 처리하기 위해 추가 작업을해야하며이를 사용해야 할 때가 종종 다른 방법으로 다른 일을 할 수 있다는 힌트입니다.
누구든지 이에 대한 아이디어가 있습니까? – user320550