질문 : Java에서 SoftReference와 WeakReference의 차이점은 무엇입니까?
java.lang.ref.WeakReference
와 java.lang.ref.SoftReference
의 차이점은 무엇입니까?
답변
약한 참조 이해 , Ethan Nicholas :
약한 참조
간단히 말해서 약한 참조 는 객체가 메모리에 남아 있도록 할만큼 충분히 강하지 않은 참조입니다. 약한 참조를 사용하면 가비지 수집기의 기능을 활용하여 도달 가능성을 결정할 수 있으므로 직접 수행 할 필요가 없습니다. 다음과 같이 약한 참조를 만듭니다.
WeakReference weakWidget = new WeakReference(widget);
그런 다음 코드의 다른 곳에서 weakWidget.get()
을 사용하여 실제 Widget
객체를 가져올 수 있습니다. 물론 약한 참조는 가비지 수집을 막을만큼 충분히 강력하지 않으므로 weakWidget.get()
null
반환하기 시작하는 (위젯에 대한 강력한 참조가없는 경우) 찾을 수 있습니다.
...
소프트 참조
소프트 참조 는 참조하는 객체를 버리고 싶지 않다는 점을 제외하면 약한 참조와 정확히 같습니다. 약하게 도달 할 수있는 객체 (가장 강력한 참조는 WeakReferences
)는 다음 가비지 수집주기에서 폐기되지만, 부드럽게 도달 할 수있는 객체는 일반적으로 잠시 동안 머무 릅니다.
SoftReferences
WeakReferences
와 다르게 동작 할 필요 는 없지만 실제로 메모리가 충분히 공급되는 한 일반적으로 부드럽게 도달 할 수있는 객체는 유지됩니다. 이렇게하면 위에서 설명한 이미지 캐시와 같은 캐시의 훌륭한 기반이됩니다. 가비지 수집기가 객체에 도달 할 수있는 정도 (강하게 도달 할 수있는 객체는 캐시에서 제거되지 않음 )와 얼마나 나쁜지 둘 다에 대해 걱정하게 할 수 있기 때문입니다. 그들이 소비하는 메모리가 필요합니다.
그리고 Peter Kessler는 다음과 같이 댓글을 달았습니다.
Sun JRE는 SoftReference를 WeakReference와 다르게 취급합니다. 사용 가능한 메모리에 부담이없는 경우 SoftReference에서 참조하는 객체를 유지하려고합니다. 한 가지 세부 사항 : "-client"및 "-server"JRE에 대한 정책은 다릅니다. -client JRE는 힙을 확장하는 대신 SoftReferences를 지우는 것을 선호하여 풋 프린트를 작게 유지하려고하지만 -server JRE는 SoftReferences를 지우는 것보다 힙 (가능한 경우)을 확장하는 것을 선호하여 성능을 높입니다. 하나의 크기가 모든 것에 맞지는 않습니다.
출처 : https://stackoverflow.com/questions/299659/whats-the-difference-between-softreference-and-weakreference-in-java
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
Java 제네릭이 암시 적으로 다형성이 아닌 이유 (0) | 2021.09.08 |
---|---|
자바 스크립트 배열을 선언 할 때 "Array ()"와 "[]"의 차이점 (0) | 2021.09.07 |
Java String을 byte []로 변환하는 방법 (0) | 2021.09.02 |
Java에서 equals 및 hashCode 메소드를 재정의 해야 하는 이유 (0) | 2021.09.01 |
Java에서 SuppressWarnings ( "unchecked")의 의미 (0) | 2021.08.27 |