软引用和虚引用的例子?
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’ 函数。相关输出显示在控制台上。