四种引用类型及引用队列
来源:互联网 发布:mac表老化时间 编辑:程序博客网 时间:2024/05/21 06:44
本文目录
1 强引用(StrongReference)
2 软引用(SoftReference)
3 弱引用(WeakReference)
4 幽灵引用/虚引用(PhantomReference)
5 引用队列(ReferenceQueue)
1 强引用(StrongReference)
效果:存在强引用的对象,不会被JVM回收。
// 强引用String str = new String("Reference");
回收:当所有的强引用都断开后,在JVM进行垃圾回收时,该对象会被回收。
// 置空obj = null;// 指向另一对象obj= newObject();
2 软引用(SoftReference)
效果:存在软引用的对象,在内存不足时,才会被JVM回收。
应用:缓存数据,提高数据的获取速度。
// 软引用:缓存数据SoftReference<String> sr = newSoftReference<String>(new String("CacheData"));// 获取数据String str = sr.get();// 断开强引用str= null;
3 弱引用(WeakReference)
效果:存在弱引用的对象,每次JVM进行垃圾回收时,该对象都会被回收。
应用:短时间缓存某些次要数据。
// 弱引用WeakReference<String> wr = newWeakReference<String>(new String("CacheData"));// 获取数据String str = wr.get();// 断开强引用str= null; // 弱引用MapWeakHashMap<String, String> whm = new WeakHashMap<String,String>();
4 幽灵引用/虚引用(PhantomReference)
效果:相当于无引用,使对象无法被使用,必须与引用队列配合使用。
应用:使对象进入不可用状态,等待下次JVM垃圾回收,从而使对象进入引用列队中。
// 引用队列ReferenceQueue<String> rq = newReferenceQueue<String>();// 幽灵引用PhantomReference<String> pr = newPhantomReference<String>(new String(""),rq);// 永远为null(幽灵引用相当于无引用)System.out.println(pr.get());
5 引用队列(ReferenceQueue)
效果:引用队列可以配合软引用、弱引用及幽灵引用使用,当引用的对象将要被JVM回收时,会将其加入到引用队列中。
应用:通过引用队列可以了解JVM垃圾回收情况。
// 引用队列ReferenceQueue<String> rq = newReferenceQueue<String>(); // 软引用SoftReference<String> sr = newSoftReference<String>(new String("Soft"),rq);// 弱引用WeakReference<String> wr = newWeakReference<String>(new String("Weak"),rq);// 幽灵引用PhantomReference<String> pr = newPhantomReference<String>(new String("Phantom"),rq); // 从引用队列中弹出一个对象引用Reference<? extends String> ref = rq.poll();
阅读全文
0 0
- 四种引用类型及引用队列
- Java四种引用类型
- java 四种引用类型
- Java 四种引用类型
- Java四种引用类型
- Java四种引用类型
- Java四种引用类型
- java四种引用类型
- Java四种引用类型
- Java四种引用类型
- Java四种引用类型
- Java四种引用类型
- Java四种引用类型
- Java的四种引用类型
- Java的四种引用类型
- java中的四种引用类型
- java的四种引用类型
- java的四种引用类型
- SpringBoot 为MapperScan添加动态扫描(占位符)功能
- 第八天学习
- Ajax工作原理
- 封装Avplayer
- 设计模式之四:访问者模式
- 四种引用类型及引用队列
- Hadoop常用命令(持续更新)
- Spring MVC小整理(1)
- sizeof()和strlen()的区别
- java容器的默认初始容量、加载因子、扩容增量问题
- (hbase开发 二) 使用maven配置CDH开发环境
- Codeforces Round #447 (Div 2 Only) Hack+FST记
- TinySTL设计与实现
- 使用python进行whois查询