软引用和幻像引用的示例?

软引用通常用于实现对内存敏感的缓存。让我们看一下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类创建一个SoftReference实例,并将该实例分配为null。在此软引用对象上调用“ get”函数,并将其分配给先前的实例。在此实例上调用“ display_msg”函数。相关消息将显示在控制台上。

虚拟引用通常用于比Java终结机制更灵活的方式调度事前清理操作。

现在让我们看一个幻影引用的例子-

示例

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'函数。相关输出将显示在控制台上。