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相关推荐

  1. java中的softreference_Java中的SoftReference和WeakReference有什么区别?

    问题 Java中的SoftReference和WeakReference有什么区别?它们有什么不同? #1 热门回答(806 赞) 弱引用弱引用,简单地说,是一个不足以强制对象保留在内存中的引用.弱引 ...

  2. Java中的SoftReference和WeakReference有什么区别?

    本文翻译自:What's the difference between SoftReference and WeakReference in Java? java.lang.ref.WeakRefer ...

  3. java softreference_Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference...

    Java引用总结--StrongReference.SoftReference.WeakReference.PhantomReference 1 Java引用介绍 Java从1.2版本开始引入了4种引 ...

  4. 深入理解StrongReference,SoftReference, WeakReference和PhantomReference

    Java 中一共有 4 种类型的引用 : StrongReference. SoftReference. WeakReference 以及 PhantomReference (传说中的幽灵引用 呵呵) ...

  5. Java 引用分类:StrongReference、SoftReference、WeakReference、PhantomReference

    一,定义 在Java中,引用的定义是:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用.后面在JDK1.2开始,引用的概念被扩充,引用被分为强引用( ...

  6. java中的softreference_Java中内存优化的SoftReference 和 WeakReference浅析

    一.引用对象类型定义 首先,引用对象在Java定义中有三种类型,从弱到强依次为:软引用.弱引用与虚引用,三种级别也各有所不同(软引用>弱引用).本文浅析下软引用与弱引用.大概的解释,软引用适合应 ...

  7. java中SoftReference与WeakReference应用于高速缓存示例

    前言: 本文首先介绍强引用StrongReference.软引用SoftReference.弱引用WeakReference与虚引用PhantomReference之间的区别与联系: 并通过一个高速缓 ...

  8. weakreference_Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别...

    weakreference 很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它. 这意味着在Java中使用Wea ...

  9. Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别

    很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它. 这意味着在Java中使用WeakReference和Sof ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task10. 两数相加
  2. 【 FPGA 】时序分析中的基本概念和术语
  3. php 转义反绡线,wordpress标题中横线“-”被转义的问题
  4. MVVM Light学习笔记(三):Messenger
  5. json传输二进制的方案(python版)
  6. css的三种引入方式 1211
  7. MySQL字段类型解析
  8. #运行后闪退_王者ios14苹果手机闪退已修复,腾讯痛失百万玩家能否再回来
  9. 在csdn平台写博客时,如何插入图片
  10. 从一句SQL得出的启示
  11. 【短文本聚类】TextCluster:短文本聚类预处理模块 Short text cluster
  12. 微信支付v2开发(6) 发货通知
  13. [新增:鸵鸟]软件开发团队的脓包:皇帝的新装、口号党、鸵鸟、废话迷
  14. python提取身份证信息查询_Python+Opencv身份证号码区域提取及识别实现
  15. Java实现的快递柜管理系统(附上完整代码可用作期末课程设计)
  16. Visual Paradigm 下载安装及使用
  17. javascript 基本用法
  18. 宋叔日记--新手级别入门全能赚钱软件!
  19. 用PS调出人像冷色艺术效果
  20. 合并两个有序数组,合并之后保持有序

热门文章

  1. Bash的循环结构(for和while)
  2. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
  3. 概率论与数理统计-ch8-假设检验
  4. Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag
  5. stylus在vue中的使用
  6. js(Dom+Bom)第七天(2)
  7. 记录一次内网渗透试验
  8. Maximum Xor Secondary(单调栈好题)
  9. Linux:进程实例信息(/proc)
  10. P1021 邮票面值设计