source

Weak Hash Map이란 무엇이며 언제 사용해야 합니까?

gigabyte 2022. 8. 18. 23:47
반응형

Weak Hash Map이란 무엇이며 언제 사용해야 합니까?

, 아, 아, 아, 아, 아, 아, 아, 아, 아.WeakHashMap제제사 사용 ??? ??? ???WeakHashMap a. a. a.HashMap

취약한 해시맵의 요소는 키 개체에 대한 다른 강력한 참조가 없는 경우 가비지 컬렉터에 의해 회수될 수 있으므로 캐시/검색 스토리지에 유용합니다.

취약한 참조는 이러한 해시 테이블로 제한되지 않으며 단일 개체에 대해 WeakReference를 사용할 수 있습니다.자원을 절약하는 데 도움이 됩니다.어떤 것에 대한 참조는 유지할 수 있지만, 그 이외의 참조가 없는 경우는 수집되도록 할 수 있습니다.(BTW, 강한 참조는 일반적인 Java 참조입니다.)또한 소프트 레퍼런스만큼 쉽게 수집되지 않는 경향이 있는 약한 레퍼런스도 있다(마지막의 강한 레퍼런스가 사라진 후 오래 머무르지 않는 경향이 있다).

다른 사람들이 이미 지적했듯이, 약한 참조는 강한 참조를 생성하지 않고 객체를 키로 사용할 수 있는 수단을 제공합니다.이 기능은 개체를 가비지 수집하는 JVM의 기능을 손상시키지 않으면서 개체의 일부 측면을 추적하는 기능을 원하는 경우에 유용합니다. 따라서 개체에 대한 메타데이터를 캐싱하거나 저장하는 데 매우 적합합니다.

Java의 강한 레퍼런스와 약한 레퍼런스에 대한 "Understand Weak References"(Oracle 블로그 기사)를 읽어보시길 권장합니다.차이를 이해하지 못하면 데이터 구조 자체가 의미가 없습니다.

체크 아웃 유효 자바, 에디션 2, 26 페이지.

메모리 누수의 또 다른 일반적인 원인은 캐시입니다.오브젝트 레퍼런스를 캐시에 넣으면 오브젝트 레퍼런스가 있다는 것을 잊어버리고 불필요해진 후 오랫동안 캐시에 남겨두기 쉽습니다.이 문제에는 몇 가지 해결책이 있습니다.캐시 외부에 해당 키에 대한 참조가 있는 한 엔트리가 정확히 관련된 캐시를 구현할 수 있다면 캐시를 WeakHashMap으로 나타냅니다. 엔트리는 사용되지 않게 되면 자동으로 삭제됩니다.WeakHashMap은 캐시 엔트리의 원하는 라이프타임이 값이 아닌 키에 대한 외부 참조에 의해 결정되는 경우에만 유용합니다.

jGuru에서:

가 WeakHashMap에 한 맵 입니다.java.lang.ref.WeakReference키를 약한 참조에 저장함으로써 키에 대한 유일한 참조가 약한 참조일 경우 키와 값의 쌍을 맵에서 동적으로 드롭할 수 있습니다.따라서 WeakHashMap은 약하게 참조되는 목록에 대한 뛰어난 구현으로, 다른 곳에서 사용되지 않는 항목은 부작용 없이 삭제될 수 있습니다.또, 키가 드롭 되는 일이 있다고 해서, 곧바로 드롭 되는 것은 아닙니다.시스템에 충분한 리소스가 있는 경우 외부에서 참조되지 않는 취약한 키 참조가 장기간 지속될 수 있습니다.

레퍼런스 상세:

취약한 참조는 도달 가능성과 가비지 콜렉터(GC)가 대신 작업을 수행하도록 하는 것입니다.약한 참조가 해결하려고 하는 문제를 이해하고 실천하는 것이 최선이라고 생각합니다.

  • IBM 기사:

    Java 이론 및 실천:메모리 누전(레퍼런스가 약한 경우)을 막는다.글로벌 맵에서 메모리 누전, 메모리 누전 식별, 복구에 대한 취약한 참조 등...

  • WeakHashMap 사용 시기에 대한 블로그 기사(링크 만료):

    ...WeakHashMap이 캐싱에 적합하지 않은 경우 어떤 용도로 사용할 수 있습니까?표준 맵을 구현하는 것이 좋습니다.강력한 참조가 있는 개체에 추가 정보를 연결하려고 합니다.개체를 키로 하여 WeakHashMap에 엔트리를 추가하고 맵 값으로 추가 정보를 입력합니다.그러면 오브젝트에 대한 강한 참조만 유지하면 추가 정보를 검색하기 위해 맵을 확인할 수 있습니다.오브젝트를 해방하면 맵엔트리가 클리어되고 추가 정보에 의해 사용된 메모리가 해방됩니다....

  • java.lang.ref에 관한 Java 문서

'캐시 메모리'를 구현하기 위해 사용합니다.어플리케이션에서 자주 재사용되는 오브젝트가 있고, 그 구축 비용이 많이 들고, 그 수가 너무 많아 모두 메모리에 저장할 수 없는 경우에는 WeakHashMap을 사용합니다.

현재 사용되지 않는 오브젝트를 거기에 둡니다.이 오브젝트가 필요한 경우 맵에서 꺼냅니다.대부분의 시간 동안 그 물체들은 지도에 남아 있을 것이다.요점은 직접 보유되지 않고 WeakReferences를 통해 보유된다는 것입니다.따라서 메모리가 부족할 경우 gc에서 수집이 허용됩니다.따라서 WeakHashMap에서 개체를 꺼내려고 할 때마다 개체가 그대로 있는지 확인해야 합니다.그렇지 않으면 다시 생성해야 합니다.

WeakHashmap을 사용하면 일부 개체를 캐시한 결과 메모리 누수가 발생할 가능성을 줄일 수 있습니다.WeakHashMap은 키에 대한 모든 참조가 삭제될 때마다 자동으로 엔트리를 삭제합니다.

Weakhashmap에서는 완전한 해시맵이 사용되지 않을 때까지 기다리지 않고 해당 엔트리를 가비지 수집하도록 허용하기 때문에 키가 더 이상 사용되지 않을 때 개별 값이 자동으로 제거됩니다.

메모리 누설을 방지하기 위해 사용할 수 있습니다.이것에 의해, 1개 또는 복수의 키가 아직 사용되고 있기 때문에, 해시 맵이 회수되지 않은 경우는, 유저 데이터등의 최대치가 되지 않는 경우에서도, 메모리 누설을 방지할 수 있습니다.

언급URL : https://stackoverflow.com/questions/5511279/what-is-a-weakhashmap-and-when-to-use-it

반응형