문제

Javadoc에서는 WeakHashMap.html, 말했다

"약한 하슈 맵의 각 주요 객체는 약한 기준의 참조로 간접적으로 저장됩니다.따라서 맵 내부와 외부에서 약한 참조가 쓰레기 수집기에 의해 지워진 후에 만 ​​키는 자동으로 제거됩니다. "

그런 다음

값 객체는 약한 해쉬 맵 자체를 통해 간접적으로 키를 참조 할 수 있습니다.즉, 값 객체는 관련 값 객체가 첫 번째 값 객체의 키를 강력하게 지칭하는 다른 주요 객체를 강력하게 지칭 할 수 있습니다.

하지만 WeakHashMap에서는 Key와 Value를 모두 약한 참조로 사용해야 하지 않을까요?즉.메모리가 부족하면 GC는 값 개체가 보유한 메모리를 해제합니다. (대부분의 경우 값 개체가 키 개체보다 더 많은 메모리를 차지하기 때문입니다.)

그리고 GC가 Value 개체를 해제하면 Key 개체도 해제될 수 있습니까?

기본적으로 메모리가 부족할 때 메모리 사용량을 줄이는 HashMap을 찾고 있습니다(GC는 필요한 경우 값과 키 개체를 수집합니다).

자바에서는 가능한가요?

감사합니다.

도움이 되었습니까?

해결책

약한 참조는 캐시에 적합하지 않습니다. NetBeans가 이를 수행하므로 어리석은 일이 될 수 있습니다.

SoftReference 당신이 원하는 것입니다.실제로 올바르게 수행하는 것은 매우 어렵습니다. 따라서 다른 사람의 솔루션을 복사하십시오.어떤 사람들은 직접 캐시를 명시적으로 관리하라고 조언합니다.

Reference단일 참조로만 작동합니다.Java SE에 "ephemerons"를 추가하자는 제안이 있었지만, 이를 적용한 구현은 본 적이 없습니다.

다른 팁

아이디어는 이 맵을 (키를 통해) 참조할 수 있는 키-값 쌍만 활성 상태로 유지하는 "조회" 데이터 구조로 사용할 수 있다는 것입니다.그래도 기본적인 아이디어는 좋지만, 기대했던 것만큼 유용하지는 않았던 것으로 기억합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top