프로그래밍 언어/JAVA

Java에서 SoftReference와 WeakReference의 차이점

Rateye 2021. 9. 3. 10:32
728x90
반응형
질문 : Java에서 SoftReference와 WeakReference의 차이점은 무엇입니까?

java.lang.ref.WeakReferencejava.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
728x90
반응형