软引用和虚引用的例子?

javaserver side programmingprogramming

软引用通常用于实现内存敏感的缓存。让我们看一个 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。在此 softreference 对象上调用 ‘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’ 函数。相关输出显示在控制台上。


相关文章