博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的四种引用
阅读量:6882 次
发布时间:2019-06-27

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

Java的四种引用:强应用,软引用,弱引用,虚引用

四种引用的不同之处仅在于垃圾回收时GC对他们的处理方式不同。在解说四种引用之前,我们先来看一下引用队列。

引用队列:当对象被gc回收之后,就会将该对象的引用加入引用队列。但是既然对象都已经被回收了,那为什么还要把该对象的引用保存起来呢?通常在对象被gc回收之后,都需要进行一些清理工作,比如如果你将对象的引用保存在WeakHashMap中,当对象被回收之后,就需要将引用从WeakHashMap中移除,防止map无休止的增长。

1、 强引用StrongReference

通常我们直接new出来的对象都是强引用的,例如StringBuffer buffer = new StringBuffer();我们知道在Jvm中对象都是通过引用来访问的,同一个对象可能有多个引用指向它。对于被强应用的对象,只要目前还有一个强应用指向它,那么该对象就无法被gc回收。

2、 软引用SoftReference

软引用是相对强应用来说相对较“软”的引用,只要内存足够,那么软引用指向的对象就不会被gc回收,但是如果内存不租了,就会被回收。

3、 弱引用WeakReference

弱引用是相对软应用更“弱”的引用,当gc在扫描jvm中的垃圾时,只要发现了某个对象是被软引用的,不管内存是否充足,该对象都会被回收。

WeakReference
activity = new WeakReference<>(widget);activity.get();复制代码

通过get()方法就可以获取到所引用的对象,但是因为弱引用的特性,我们经常会遇到activity.get()返回null的情况,所以

4、 虚引用PhantomReference

虚引用没有任何“引用”的意思,换句话说就是持有虚引用的对象不持有任何引用,它可能随时被gc回收。,就目前来看虚引用好像形同虚设,没有任何作用,但凡事存在均有理由,之所以设计虚引用是想通过它来跟踪gc回收对象的过程。虚引用与软引用、弱引用的不同之处就是它必须配合引用队列来使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

ReferenceQueue queue = new ReferenceQueue ();PhantomReference pr = new PhantomReference (object, queue); 复制代码

总结

根据上面的分析描述可知:

  1. 从引用的强弱上依次为:强引用、软应用、弱引用、虚引用
  2. 软引用经常被用来设计高速cache
  3. 虚引用必须配合引用队列来使用

转载于:https://juejin.im/post/5a3d26c26fb9a0452a3c8676

你可能感兴趣的文章
hdu 1693 : Eat the Trees 【插头dp 入门】
查看>>
nginx安装与fastdfs配置--阿里云
查看>>
wordpress通过代码禁用IE8, IE9,IE10等IE浏览器兼容视图模式(Compatibility View)
查看>>
This application failed to start because it could not find or load the Qt platform plugin "windows"
查看>>
CSS3展现精彩的动画效果 css3的动画属性
查看>>
JSON+JSONP(加量不加价)
查看>>
windows下安装ubuntu,并用win引导ubuntu启动
查看>>
java开发常用工具
查看>>
在VMware Vcenter添加一块网卡后,启动虚机找不到网卡,发现有一个ens38(redhat7.5)...
查看>>
static 关键字和类的加载顺序
查看>>
安卓ListView基础应用
查看>>
【原创】PostgreSQL 快速创建空表TIPS
查看>>
利用PowerBI结合SCOM展示数据报表
查看>>
中学时代的记忆---老师的黑板
查看>>
Horizon View 6-View Connection Server部署⑴
查看>>
iptables 实战演练
查看>>
Python 学习笔记 - 线程(线程锁,信标,事件和条件)
查看>>
RHEL6基础四十一之selinux和iptables基础
查看>>
数据结构之单链表在第i个元素之前插入元素的算法
查看>>
Exchange Server 运维管理02:邮箱数据库存储原理
查看>>