소프트 참조는 메모리에 민감한 캐시를 구현하는 데 자주 사용됩니다. Java의 소프트 참조 예를 살펴보겠습니다.
예시
import java.lang.ref.SoftReference; class Demo{ public void display_msg(){ System.out.println("Hello there"); } } public class Demo_example{ public static void main(String[] args){ Demo my_instance = new Demo(); my_instance.display_msg(); SoftReference<Demo> my_softref = new SoftReference<Demo>(my_instance); my_instance = null; my_instance = my_softref.get(); my_instance.display_msg(); } }
출력
Hello there Hello there
Demo라는 클래스에는 관련 메시지를 표시하는 'display_msg'라는 함수가 포함되어 있습니다. 주 함수를 포함하는 'Demo_example'이라는 또 다른 클래스가 정의되어 있습니다. 여기에서 Demo 클래스의 인스턴스가 생성되고 이 인스턴스에서 'display_msg' 함수가 호출됩니다. Demo 클래스에 대한 ASoftReference 인스턴스가 생성되고 해당 인스턴스가 null에 할당됩니다. 'get' 함수는 이 소프트 참조 개체에서 호출되고 이전 인스턴스에 할당됩니다. 이 인스턴스에서 'display_msg' 함수가 호출됩니다. 콘솔에 관련 메시지가 표시됩니다.
팬텀 참조는 Java 종료 메커니즘에서 가능한 것보다 더 유연한 방식으로 사후 정리 작업을 예약하는 데 자주 사용됩니다.
이제 Phantom References −
의 예를 살펴보겠습니다.예시
import java.lang.ref.*; class Demo{ public void display_msg(){ System.out.println("Hello there"); } } public class Demo_example{ public static void main(String[] args){ Demo my_instance = new Demo(); my_instance.display_msg(); ReferenceQueue<Demo> refQueue = new ReferenceQueue<Demo>(); PhantomReference<Demo> phantomRef = null; phantomRef = new PhantomReference<Demo>(my_instance,refQueue); my_instance = null; my_instance = phantomRef.get(); my_instance.display_msg(); } }
출력
Hello there Exception in thread "main" java.lang.NullPointerException at Demo_example.main(Demo_example.java:22)
Demo라는 클래스에는 관련 메시지를 표시하는 'display_msg'라는 함수가 포함되어 있습니다. Demo_example이라는 다른 클래스에는 주요 함수가 포함되어 있습니다. 이 함수에는 Demo 클래스의 인스턴스가 포함되어 있으며 'display_msg' 함수가 호출됩니다. 그런 다음 ReferenceQueue 인스턴스가 생성됩니다. 또 다른 PhantomReference 인스턴스가 생성되어 'null'에 할당됩니다. 그러면 이전 인스턴스가 null에 할당되고 이 인스턴스에서 'display_msg' 함수가 호출됩니다. 관련 출력이 콘솔에 표시됩니다.