약하고 부드러운 참조의 개념을 아는 것은 쓰레기 수집 과정에서 중요한 역할을하는 방법과 다릅니다. 우리는 쓰레기 수집가가 재활용 기준을 충족하는 객체에 대한 메모리를 되 찾는다는 것을 알고 있지만, 모든 프로그래머가 재활용 기준이 객체를 가리키는 참조 유형에 달려 있음을 알지는 않습니다. 이것은 약한 참조와 Java의 소프트 참조의 주요 차이점입니다. 물체가 약한 참조 만 가리키는 경우 가비지 수집기는 즉시 물체를 재활용하여 재활용하는 시급한 방법입니다. 비교적, 이러한 물체를 가리키는 부드러운 참조가있는 경우 JVM에 메모리가 필요한 경우에만 재활용됩니다. 약하고 부드러운 인용의 특별한 행동은 경우에 따라 매우 유용합니다. 예 : 소프트 참조는 캐시를 구현하는 데 잘 사용될 수 있습니다. 약한 참조는 클래스 로더 참조 저장과 같은 메타 데이터 저장에 매우 적합합니다. 클래스가로드되지 않으면 클래스 로더에 대한 언급도 없습니다. 마지막으로 강한 참조가 제거되면 약한 참조 클래스 로더 만 재활용됩니다. 이 기사에서는 다음과 같은 다양한 유형의 Java 참조에 대해 다음과 같이 설명합니다.
약한 참고 문헌 대 Java의 소프트 참조
Java에는 4 가지 유형의 참고 문헌이 있습니다.
1. 강한 참조
2. 약점
3. 소프트로 회의
4. 팬텀 컨퍼런스
강력한 참조는 코드 문자열의 변수 S = "ABC"와 같은 프로그래밍에 사용하는 가장 간단한 참조입니다. 강력한 참조로 가리키는 모든 물체는 쓰레기 수집기가 재활용 할 수 없으며 이러한 객체는 프로그램에서 필요합니다. 약한 참조는 java.lang.ref.weakreference 클래스 클래스 클래스로 표시되며 다음 코드를 사용하여 약한 참조를 만들 수 있습니다.
코드 사본은 다음과 같습니다.
카운터 카운터 = 새 카운터 (); // 강한 참조 - 라인 1
약점 <cound> 약점 <카운터); // 약한 참조;
Counter = null; 이제 카운터 객체는 쓰레기 수집에 적합합니다
이제 강한 기준 객체의 카운터에 null 값을 할당하는 한, 객체는 쓰레기 수집기에 의해 재활용 될 수 있습니다. 객체에는 더 이상 다른 강한 참조가 포함되어 있지 않기 때문에, 약한 수치조차 물체에 대한 지적조차도 쓰레기 수집가가 물체를 재활용하는 것을 방해 할 수 없습니다. 반대로, 객체에 소프트 참조가 포함 된 경우 JVM에 메모리가 필요하지 않으면 카운터 객체는 즉시 재활용되지 않습니다. Java의 소프트 참조는 Java.lang.ref.softreference 클래스로 표시됩니다.
코드 사본은 다음과 같습니다.
Coun
SoftReference Soft = New Softreference (Prime); // Soft Reference 변수는 2 행에서 생성 된 반대 객체를 가지고 있습니다.
prime = null; // 이제 카운터 객체는 쓰레기 수집을받을 수 있지만 JVM이 메모리가 절대적으로 필요할 때만 수집됩니다.
강력한 참조가 비어 있으면 코드의 두 번째 동작 인 카운터는 소프트 참조를 만들어냅니다.이 참조는 또한 쓰레기 수집기가 재활용 물체를 방지 할 수 없지만, 약한 참조의 긴급한 재활용 물체와는 다른 재활용을 지연시킬 수 있습니다. 소프트 참조와 약한 참조 사이의 이러한 차이를 고려할 때, 소프트 참조는 캐싱 메커니즘에 더 적합하지만 약한 참조는 메타 데이터 저장에 더 적합합니다. 약한 참조를 사용하는 또 다른 예는 Hashmap 및 Treemap 외에도 맵 인터페이스의 또 다른 구현 인 약점 해시 맵입니다. 약점은 기능이 있습니다.지도의 키는 약한 참조로 캡슐화되므로 강한 참조가 삭제되면 약한 하슈 맵 내부의 약한 참조는 쓰레기 수집기에 의해 물체가 수집되지 않도록 할 수 없습니다.
가상 참조는 java.lang.ref 패키지의 세 번째 사용 가능한 참조입니다. 가상 참조가있는 객체는 언제든지 쓰레기 수집기가 재활용 할 수 있습니다. 약한 참조 및 소프트 참조와 유사하게 다음 코드를 통해 가상 참조를 만들 수 있습니다.
코드 사본은 다음과 같습니다.
DigitalCounter Digit = New DigitalCounter (); Digit 참조 변수에는 강력한 참조 행이 있습니다
phantomreference phantom = 새로운 phantomreference (digit);
숫자 = null;
강한 기준이 제거되면 세 번째 줄의 DigitalCounter 객체는 언제든지 쓰레기 수집기에 의해 재활용 될 수 있습니다. 객체를 가리키는 가상 참조가 하나만 있기 때문에 가상 참조는 쓰레기 수집기가 객체를 되 찾는 것을 방해 할 수 없습니다.
약한 참조, 소프트 참조, 가상 참조 및 약한 하슈 맵을 이해하는 것 외에도 참조 큐를 이해해야합니다. 약한 참조, 소프트 참조 및 가상 참조를 작성하는 과정에서 다음 코드를 통해 참조 대기열 참조 큐를 제공 할 수 있습니다.
코드 사본은 다음과 같습니다.
ReferenceQueue refqueue = 새로운 참조 큐어 ();
DigitalCounter Digit = New DigitalCounter ();
Phantomreference <DigitalCounter> Phantom = 새로운 PhantomReference <DigitalCounter> (Digit, Refqueue);
참조 인스턴스는 참조 큐에 추가되며 언제든지 참조 큐를 쿼리하여 개체를 재활용 할 수 있습니다. 물체의 수명주기는 아래 그림에서 설명 할 수 있습니다.