如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集的执行绪清除,你必须要用一个 reference记住此对象,以便随时观察,但是却因此造成此对象的 reference 数目一直无法为零, 使得对象无法被清除。

  java.lang.ref.WeakReference

不过,现在有了 Weak Reference之后,这就可以迎刃而解了。如果你希望能随时取得某对象的信息,但又不想影响此对象的垃圾收集,那么你应该用 Weak Reference来记住此对象,而不是用一般的 reference。

A obj = new A();
    WeakReference wr = new WeakReference(obj);
    obj = null;

//等待一段时间,obj对象就会被垃圾回收
...

if (wr.get()==null) {
System.out.println("obj 已经被清除了 ");
} else {
System.out.println("obj 尚未被清除,其信息是 " obj.toString());
}
...
在此例中,透过 get() 可以取得此 Reference 的所指到的对象,如果传出值为 null 的话,代表此对象已经被清除。

这类的技巧,在设计 Optimizer 或 Debugger这类的程序时常会用到,因为这类程序需要取得某对象的信息,但是不可以影响此对象的垃圾收集。

  java.lang.ref.SoftReference

Soft Reference 虽然和 Weak Reference 很类似,但是用途却不同。 被 Soft Reference指到的对象,即使没有任何 Direct Reference,也不会被清除。一直要到 JVM 内存不足时且 没有 DirectReference 时才会清除,SoftReference 是用来设计 object-cache 之用的。如此一来SoftReference 不但可以把对象 cache 起来,也不会造成内存不足的错误 (OutOfMemoryError)。我觉得Soft Reference 也适合拿来实作 pooling 的技巧。

A obj = new A();
    SoftRefenrence sr = new SoftReference(obj);

引用时

if(sr!=null){
        obj = sr.get();
    }else{
        obj = new A();
        sr = newSoftReference(obj);
    }

转载于:https://blog.51cto.com/masklayer/762703

Java之WeakReference与SoftReference使用讲解相关推荐

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

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

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

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

  3. Java中的 WeakReference 和 SoftReference

    我们知道Java语言中没有指针,取而代之的是引用reference.Java中的引用又可以分为四种:强引用,弱引用(WeakReference),软引用(SoftReference),虚引用(Phan ...

  4. java中的softreference_Java中的 WeakReference 和 SoftReference

    我们知道Java语言中没有指针,取而代之的是引用reference.Java中的引用又可以分为四种:强引用,弱引用(WeakReference),软引用(SoftReference),虚引用(Phan ...

  5. Java引用之WeakReference和SoftReference

    在Java1.2中我们可以发现一个java.lang.ref包,在这个包中我们可以发现有关引用的知识,比如WeakReference弱引用和SoftReference强引用. 弱引用(WeakRefe ...

  6. JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解

    java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...

  7. MySQL 数据类型讲解 和Java中所对应的数据类型讲解

    MySQL 数据类型讲解 和Java中所对应的数据类型讲解 Mysql数据类型分类 在Mysql中常用数据类型一共有四种字符串数据类型.日期/时间数据类型.数值数据类型以及二进制数据类型. 一.字符串 ...

  8. WeakReference与SoftReference

    WeakReference与SoftReference都可以用来保存对象的实例引用,这两个类与垃圾回收有关. WeakReference是弱引用,其中保存的对象实例可以被GC回收掉.这个类通常用于在某 ...

  9. java中PreparedStatement和Statement详细讲解

    java中PreparedStatement和Statement详细讲解 大家都知道PreparedStatement对象可以防止sql注入,而Statement不能防止sql注入,那么大家知道为什么 ...

最新文章

  1. TypeScript 素描 - 函数
  2. Hibernate之对象关系映射
  3. js 页面所有超链接后加随机数 基于jquery
  4. 华为服务器ibmc怎么装系统,华为服务器安装操作系统
  5. 转载:如果你想辞职,先不妨看看这篇文章
  6. Part 3 —— 发布 Go Modules
  7. jre7或jre8或其他版本共存问题
  8. 课堂经验值管理小程序_小程序刷新课堂评价 “量子奖状”能量大
  9. C# Excel插入Object
  10. C 语言 数据类型及所占字节数
  11. 纵观 Excel 演化史,开发者如何通过“表格技术”提升企业生产力
  12. Linux内存管理原理笔记
  13. 51单片机可以晚电子游戏吗_电子游戏是在浪费时间吗
  14. 唯品会商品详情API接口(item_get-获得唯品会商品详情接口),唯品会详情API接口
  15. NC65 对上年度反结账,调整数据后重新结账后,对本年度年初重算时系统报错:更新记数错误。
  16. rust crates源国内加速镜像
  17. 比手机还小的打印机?极印·立可印N1潮玩口袋照片打印机评测体验
  18. 【转】MIUI8以及ViVO X9上在Android Studio运行出错集及其解决方案
  19. 洛谷P1983 车站分级 拓扑排序
  20. 【原创漫画】计划排太满造成的3种悲催结局,你遇见过几个?

热门文章

  1. 前端动态获取servlet虚拟路径_Day40_Servletamp;HTTPamp;Request
  2. js list操作_使用 Node.js 实现一个命令行 todo-list(1)- 基本功能
  3. GitHub中README.md文件的编辑
  4. 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...
  5. vue-router 跳转原理
  6. 嵌入式视频处理基础(四)
  7. Activity-数据状态的保存
  8. Edge好用么?几条你不知道的Edge小技巧
  9. 360回归A股,周鸿祎来给BAT和小米添堵了
  10. 在windows服务器开启php的gd库出错