Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

소프트 참조 및 팬텀 참조의 예?

<시간/>

소프트 참조는 메모리에 민감한 캐시를 구현하는 데 자주 사용됩니다. 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' 함수가 호출됩니다. 관련 출력이 콘솔에 표시됩니다.