博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java对象引用类型
阅读量:6670 次
发布时间:2019-06-25

本文共 1590 字,大约阅读时间需要 5 分钟。

hot3.png

    在Java中,有一个话题方向是内存管理和回收。因为jvm把这些回收的操作和策略都实现了。并且一直在改进。所以,一般在开发过程中对内存回收相关事情我们是无感知的。其实这也是java能够很快超越C和C++的原因之一吧。在Java中,为了配合内存回收,提供了四种引用类型。分别是:强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)、虚引用(PhantomReference)

这四种引用分别对应四种四种回收机制和策略。

接下来,分别讨论。

  • 强引用(StrongReference)

    在日常的开发中,基本使用的都是强引用,最常见的new一个对象,就属于强引用。并且开发人员最熟悉的就是强引用,不多在这里讨论。

//这里的object引用便是一个强引用,不会被GC回收。Object object = new Object();
  • 软引用(SoftReference)

 特点:

    软引用(SoftReference)的一个实例保存对一个Java对象的软引用, 该软引用的存在不妨碍垃圾收集线程对该Java对象的回收。也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对 这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用。另外,一旦垃圾线程回收该Java对象之 后,get()方法将返回null。软引用的对象容易操控,不会强制驻守在内存,是缓存的极佳方式。    

    软引用在JVM报告内存不足的时候才会被GC回收,否则不会回收

  使用示例:

Map
> imageCache = new new HashMap
>();//强引用的Bitmap对象Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//软引用的Bitmap对象SoftReference
bitmapcache = new SoftReference
(bitmap);//添加该对象到Map中使其缓存imageCache.put("1",softRbitmap);...//从缓存中取软引用的Bitmap对象SoftReference
bitmapCache = imageCache.get("1");//取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空Bitmap bm = bitmapCache .get();
  • 弱引用(WeakReference)

特点:

    和软引用相比,被弱引用了的对象拥有更短的内存时间(也就是生命周期)。垃圾回收器一旦发现了被弱引用的对象,不管当前内存空间是不是足够,都会回收它的内存

    当GC一但发现了弱引用对象,将会释放WeakReference所引用的对象。弱引用使用方法与软引用类似,但回收策略不同。                    

  • 虚引用(PhantomReference)

特点:    

    虚引用不是一种真实可用的引用类型,完全可以视为一种“形同虚设”的引用类型。设计虚引用的目的在于结合引用关联队列,实现对对象引用关系的跟踪。虚引用对应着java.lang.ref.PhantomReference类。一个对象如果要被虚引用,只需将其作为参数传入PhantomReference类的构造方法中就行了,同时作为参数传入的还有引用关联队列java.lang.ref.ReferenceQueue的对象实例。

 

 

 

转载于:https://my.oschina.net/ChinaHaoYuFei/blog/3059247

你可能感兴趣的文章
相约QCon北京2013大会,图灵全程为您准备好图书
查看>>
晒晒公司电脑配置
查看>>
Looper.myLooper().quit() 报 NullPointerException
查看>>
SSH1还是SSH2与Annotation还是Xml配置的问题
查看>>
简单构建工具SBT
查看>>
H3C设备TELNET远程登录
查看>>
分享一个快速开发jQuery插件工具:jqueryboilerplate(转)
查看>>
Training的第二十天
查看>>
mysql设置主键自动增长
查看>>
linux系统的启动过程
查看>>
MySQL性能分析
查看>>
IIS错误日志 事件ID: 1093
查看>>
解决Unable to resolve target 'android-7'报错
查看>>
显示python的site-packages路径
查看>>
Connections could not be acquired from the unde...
查看>>
UIAlertView 总结
查看>>
邮件服务器:SMTP协议原始命令码和工作原理
查看>>
在Sublime Text中配置 JavaScript 控制台(JavaScript Console in Sublime Text)
查看>>
python使用os模块获取当前目录
查看>>
DNS服务(一)——DNS原理及其解析过程详解
查看>>