SoftReference和WeakReference
Java2增强了内存管理功能, 增加了一个java.lang.ref包,其中定义了三种引用类。这三种引用类分别为SoftReference、WeakReference和PhantomReference.通过使用这些引用类,程序员可以在一定程度与GC进行交互,以便改善GC的工作效率。这些引用类的引用强度介于可达对象和不可达对象之间。
创建一个引用对象也非常容易,例如如果你需要创建一个Soft Reference对象,那么首先创建一个对象,并采用普通引用方式(可达对象);然后再创建一个SoftReference引用该对象;最后将普通引用设置为null.通过这种方式,这个对象就只有一个Soft Reference引用。同时,我们称这个对象为Soft Reference 对象。
Soft Reference的主要特点是据有较强的引用功能。只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。另外,这些引用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null.它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory.以下给出这种引用类型的使用伪代码;
//申请一个图像对象
Image p_w_picpath=new Image();//创建Image对象
…
//使用 p_w_picpath
…
//使用完了p_w_picpath,将它设置为soft 引用类型,并且释放强引用;
SoftReference sr=new SoftReference(p_w_picpath);
p_w_picpath=null;
…
//下次使用时
if (sr!=null) p_w_picpath=sr.get();
else{
//由于GC由于低内存,已释放p_w_picpath,因此需要重新装载;
p_w_picpath=new Image();
sr=new SoftReference(p_w_picpath);
}
Weak引用对象与Soft引用对象的最大不同就在于:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收。Weak引用对象更容易、更快被GC回收。虽然,GC在运行时一定回收Weak对象,但是复杂关系的Weak对象群常常需要好几次GC的运行才能完成。Weak引用对象常常用于Map结构中,引用数据量较大的对象,一旦该对象的强引用为null时,GC能够快速地回收该对象空间。
转载于:https://blog.51cto.com/jianshusoft/695169
SoftReference和WeakReference相关推荐
- java中的softreference_Java中的SoftReference和WeakReference有什么区别?
问题 Java中的SoftReference和WeakReference有什么区别?它们有什么不同? #1 热门回答(806 赞) 弱引用弱引用,简单地说,是一个不足以强制对象保留在内存中的引用.弱引 ...
- Java中的SoftReference和WeakReference有什么区别?
本文翻译自:What's the difference between SoftReference and WeakReference in Java? java.lang.ref.WeakRefer ...
- java softreference_Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference...
Java引用总结--StrongReference.SoftReference.WeakReference.PhantomReference 1 Java引用介绍 Java从1.2版本开始引入了4种引 ...
- 深入理解StrongReference,SoftReference, WeakReference和PhantomReference
Java 中一共有 4 种类型的引用 : StrongReference. SoftReference. WeakReference 以及 PhantomReference (传说中的幽灵引用 呵呵) ...
- Java 引用分类:StrongReference、SoftReference、WeakReference、PhantomReference
一,定义 在Java中,引用的定义是:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用.后面在JDK1.2开始,引用的概念被扩充,引用被分为强引用( ...
- java中的softreference_Java中内存优化的SoftReference 和 WeakReference浅析
一.引用对象类型定义 首先,引用对象在Java定义中有三种类型,从弱到强依次为:软引用.弱引用与虚引用,三种级别也各有所不同(软引用>弱引用).本文浅析下软引用与弱引用.大概的解释,软引用适合应 ...
- java中SoftReference与WeakReference应用于高速缓存示例
前言: 本文首先介绍强引用StrongReference.软引用SoftReference.弱引用WeakReference与虚引用PhantomReference之间的区别与联系: 并通过一个高速缓 ...
- weakreference_Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别...
weakreference 很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它. 这意味着在Java中使用Wea ...
- Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别
很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它. 这意味着在Java中使用WeakReference和Sof ...
最新文章
- 刻意练习:LeetCode实战 -- Task10. 两数相加
- 【 FPGA 】时序分析中的基本概念和术语
- php 转义反绡线,wordpress标题中横线“-”被转义的问题
- MVVM Light学习笔记(三):Messenger
- json传输二进制的方案(python版)
- css的三种引入方式 1211
- MySQL字段类型解析
- #运行后闪退_王者ios14苹果手机闪退已修复,腾讯痛失百万玩家能否再回来
- 在csdn平台写博客时,如何插入图片
- 从一句SQL得出的启示
- 【短文本聚类】TextCluster:短文本聚类预处理模块 Short text cluster
- 微信支付v2开发(6) 发货通知
- [新增:鸵鸟]软件开发团队的脓包:皇帝的新装、口号党、鸵鸟、废话迷
- python提取身份证信息查询_Python+Opencv身份证号码区域提取及识别实现
- Java实现的快递柜管理系统(附上完整代码可用作期末课程设计)
- Visual Paradigm 下载安装及使用
- javascript 基本用法
- 宋叔日记--新手级别入门全能赚钱软件!
- 用PS调出人像冷色艺术效果
- 合并两个有序数组,合并之后保持有序
热门文章
- Bash的循环结构(for和while)
- [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
- 概率论与数理统计-ch8-假设检验
- Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag
- stylus在vue中的使用
- js(Dom+Bom)第七天(2)
- 记录一次内网渗透试验
- Maximum Xor Secondary(单调栈好题)
- Linux:进程实例信息(/proc)
- P1021 邮票面值设计