强引用、软引用、弱引用、虚引用
来源:互联网 发布:淘宝如何装修手机店铺 编辑:程序博客网 时间:2024/06/08 05:42
强引用就是指在程序代码之中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。
软引用是用来描述一些还有用但并非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。
弱引用也是用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。
虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。
import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;class Node { private String msg = "df"; Node(){ } Node(String msg){ this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public void finalize(){ System.out.println("Finalizing ... " + msg); } }public class Reference { static ReferenceQueue<Node> refQueue = new ReferenceQueue<Node>(); public static void main(String[] args) { //强引用 Node node1 = new Node(); node1.setMsg("node1"); //软引用 SoftReference<Node> node2 = new SoftReference<Node>(new Node()); node2.get().setMsg("node2"); //弱引用 WeakReference<Node> node3 = new WeakReference<Node>(new Node()); node3.get().setMsg("node3"); //虚引用 ReferenceQueue<Node> rq = new ReferenceQueue<Node>(); PhantomReference<Node> ref = new PhantomReference<Node>(new Node("node4"),rq); System.gc(); System.out.println(node1.getMsg()); System.out.println(node2.get().getMsg()); //System.out.println(node3.get().getMsg()); }}
运行结果如下:
5 0
- Java 强引用、 软引用、 弱引用、虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- 转:强引用、软引用、弱引用和虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- 详解:强引用 软引用 弱引用 虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- java 强引用,软引用,弱引用,虚引用
- java 强引用,软引用,弱引用,虚引用
- Java 强引用、软引用、弱引用、虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- Java强引用、 软引用、 弱引用、虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- Java 强引用、 软引用、 弱引用、虚引用
- Java强引用、 软引用、 弱引用、虚引用
- Java强引用、 软引用、 弱引用、虚引用
- QT5生成可执行文件总结
- 介绍 Spring IoC 容器和 bean
- android pull解析xml
- Android开发环境离线工具包
- 保护模式下的应用
- 强引用、软引用、弱引用、虚引用
- ubuntu下apt-get指令中autoclean,clean,autoremove,--purgeremove说明
- Unity中的C#学习(二)
- lua 函数
- 自定义AvatarImageView满足你所有头像显示需求
- 关于 "can't identify protocol" 问题的定位
- mongo集群合并空的数据块
- 51nod1265四点共面
- centos5.x,6.x上的VPN架设及错误解决