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