【Java】【 Android】中的引用分类和使用
来源:互联网 发布:在淘宝上怎么选紫砂壶 编辑:程序博客网 时间:2024/06/05 00:23
Java/android中的引用分类及其使用解析
强应用(Strong reference)
- 一般形式为A a = new A();这种类型,这是最常见的一种引用方法;
- 强引用本身存储在栈内存当中,其存储指向内存中对象的地址;
- 只有当a = null这种情况下,即没有任何强引用再指向这个对象,垃圾回收期才会考虑将这个对象收回。
软引用(Soft Reference)
以下一段实例来讲解软引用
import java.lang.ref.SoftReference; public class ReferenceTest { public static void main(String[] args) { A a = new A(); SoftReference<A> srA = new SoftReference<A>(a); a = null; if (srA.get() == null) { System.out.println("a对象进入垃圾回收流程"); } else { System.out.println("a对象尚未被回收" + srA.get()); } // 垃圾回收 System.gc(); if (srA.get() == null) { System.out.println("a对象进入垃圾回收流程"); } else { System.out.println("a对象尚未被回收" + srA.get()); } } } class A { }
以上运行结果:
1 a对象尚未被回收A@4807ccf6 2 a对象尚未被回收A@4807ccf6
以下为对上述软引用的分析
在第一次将A = null;的时候,垃圾回收器可能还没有反应过来,所以没有将这个对象回收掉。但是强行进行垃圾回收的时候,第二次输出结果显示还是没有完成对A的垃圾回收。所以有如下结论:
- 软引用是以强引用为参数创建的,软引用本身也是存储在栈中,通过新创建的来指向这个软引用对象
- 何时回收
- 当其指示没有任何的强引用对象指向其;
- 并且当虚拟机内存不足的时候才会被垃圾回收器收回。
*因此可知:软引用延长了对象在内存中占据堆内存的时间,所以一般常用的都是软引用。
弱引用(weakReference)
实力代码和软引用类似,只是把所有软引用的地方改成弱引用。但是执行的结果如下
a对象尚未被回收A@52e5376aa对象进入垃圾回收流程
有以上执行结果可知:
- 弱引用在对象一旦被置为空的时候,就会被垃圾回收器回收掉;
- 那弱引用还有何用呢?
- 当对象已经被引用了,因为业务需要,还需要再次引用这个对象,此时又不想对原来的对象造成任何的影响,此时就可以使用弱引用了,用完了立马被回收掉就好了。相当于一次性筷子使得,用完就丢掉了。
0 0
- 【Java】【 Android】中的引用分类和使用
- Java中的引用及分类
- Java中的引用类型分类以及使用场景
- Android中的引用传递和值传递分析(Java)
- 彻底理解引用在 Android 和 Java 中的工作原理
- Java中的四种引用介绍和使用场景
- Java中的四种引用介绍和使用场景
- android中的软引用和弱引用
- Android 中的软引用和弱引用
- android中的软引用和弱引用
- Java中的强引用和弱引用
- java中的引用和溢出
- java中的引用和GC
- Java中的对象和引用
- Java中的引用和指针
- java 引用对象分类
- Java中的软引用,弱引用和虚引用
- Java中的软引用,弱引用和虚引用
- 中断上半部,下半部/软中断/tasklet/工作队列
- 一元多项式求积
- cache
- 一个电网QT项目的开篇
- c++第二次试验
- 【Java】【 Android】中的引用分类和使用
- J2EE轻量级框架--3.30学习心得
- 成为顶级Java程序猿必看的5本书
- 【USACO题库】5.2.1 Snail Trails蜗牛的旅行
- Android中ViewPgae中的Fragment如何确认当前页面可见的问题
- Linux设备树笔记
- 【java】final和final static的区别
- 递归
- Python环境部署