java之强、软、弱、虚四大引用
来源:互联网 发布:ztree导出json 编辑:程序博客网 时间:2024/06/06 05:48
强引用
强引用就是普通的对象引用:
String s = "string"; Integer i = new Integer(1);
s和i都是一个强引用,强引用指向的对象GC无论如何都不会回收,它宁可抛出OOM(out of memory)。
软引用
软引用需要指明:
String s = "string"; SoftReference softS = new SoftReference(s);
softS即为指向”string”这个字符串对象的软引用。软引用指向的对象只有在内存不足时才会被GC回收,这里有个前提,没有任何强引用指向这个对象,仅有软引用指向这个对象上述情况才有意义。比如上面的代码:如果s定义在方法内部,那么s这个强引用在运行栈上,方法结束这个强引用也就没有了,但如果s定义成类变量,那么这个引用就不是在栈上(在堆或方法区中),这时就算有softS这个软引用也是没用的,内存不足时也不会被回收。
弱引用
弱引用同样需要指明:
String s = "string"; WeakReference weakS = new WeakReference(s);
仅有弱引用指向的对象,会被GC果断回收。
虚引用
虚引用定义如下:
String s = "string"; PhantomReference phantomS = new PhantomReference(s, new ReferenceQueue<PhantomReference>());
构造方法多了一个参数,引用队列。仅有虚引用指向的对象几乎等于没有引用指向这个对象,会被GC非常果断的回收,如果虚引用指向的对象被GC回收,GC就会把这个虚引用加入队列。软引用和弱引用同样由此过程,如果软引用和弱引用指向的对象被回收,GC就会把他们加入队列(如果引用队列存在的话)。
软引用的一个常用场景
用来实现缓存,比如一个应用要大量读取本地图片,如果这些图片都放在外存里,读取效率会非常的低下,如果都在内存里,太占内存容量,容易溢出。这时软引用就派上用场了,当内存不够时,GC就会回收一部分(或全部)图片,以解放内存。
下面代码摘自:
http://blog.csdn.net/arui319/article/details/8489451
....private Map<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>();<br>....public void addBitmapToCache(String path) { // 强引用的Bitmap对象 Bitmap bitmap = BitmapFactory.decodeFile(path); // 软引用的Bitmap对象 SoftReference<Bitmap> softBitmap = new SoftReference<Bitmap>(bitmap); // 添加该对象到Map中使其缓存 imageCache.put(path, softBitmap); } public Bitmap getBitmapByPath(String path) { // 从缓存中取软引用的Bitmap对象 SoftReference<Bitmap> softBitmap = imageCache.get(path); // 判断是否存在软引用 if (softBitmap == null) { return null; } // 取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空 Bitmap bitmap = softBitmap.get(); return bitmap; }
0 0
- java之强、软、弱、虚四大引用
- Java 的四大引用:强引用、软引用、弱引用和虚引用
- JAVA的四大引用,强引用,软引用,弱引用,虚引用
- Java中的四大引用(强引用,弱引用,软引用,虚引用)
- 笔记-java四大引用(强引用,软引用,弱引用,虚引用)
- Java基础_四大引用(强引用、软引用、弱引用、虚引用)
- java之强引用、弱引用、软引用、虚引用
- Java之:强引用、弱引用、软引用、虚引用
- 简单直白教你理解Java中四大引用强引用,软引用,弱引用,虚引用
- 简单直白教你理解Java中四大引用强引用,软引用,弱引用,虚引用
- android中四大引用的区别,强引用、软引用、弱引用和虚引用
- Android修炼之道—Java之强引用、软引用、弱引用、虚引用
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- Java基础之强引用,软引用,弱引用,虚引用
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- 学习container_of
- MySQL入门——修改数据表5:给指定表的指定字段添加外键约束
- scp命令
- 关系映射文件***.hbm.xml详解
- XML Schema
- java之强、软、弱、虚四大引用
- [五年困惑] 从数学到计算机 从莱布尼兹到冯诺依曼 从数理逻辑到算法分析
- UEFI+GPT引导实践篇 (UEFI引导安装64位Win7/Win8)
- 专题三1016
- hibernate关联映射与集合映射详解
- ng-repeat 中动态绑定ng-click 点击事件处理函数&动态改变ng-class
- 安卓内存泄露分析整理
- 机器学习常见算法总结(面试用)
- c语言实例之矩阵转置