Java 中的四种引用
1、强引用(Strong Reference)在 Java 中四种引用中是“最强”的,我们平时通过 new 关键字创建的对象都属于强引用,如下面的代码:
Person person = new Person();
其中的 person 就是一个强引用,只有当它不再被使用后才会被垃圾回收器回收掉。当内存不足时,但是其依然在被使用中,那么垃圾回收器也不会回收其引用的对象;JVM 宁愿报“内存泄漏错误 (OutofMemoryError)”,终止程序也不会回收此引用所关联的对象。
2、软引用(Soft Reference)是比强引用要弱一级的引用,当内存不足时即可被垃圾回收器(garbage collection)回收,内存充足是不被垃圾回收器(garbage collection)回收;通常用于实现高速缓存,顾名思义,高速缓存要求速度快,我们通常将数据放置到内存中来实现,出于成本的考虑,内存的大小终究是有限,这就要求我们提炼出访问高频,更新低频的数据放入到缓存中;随着放入的数据越来越多时,内存出现不足,JVM 通过 GC 回收一部分内存资源,并不影响客户端的访问,因为我们在数据库中有完整的数据,从而避免系统的宕机。下面是示例代码,用于创建一个软引用:
Person person = new Person();
SoftReference<Person> personSoftReference = new SoftReference(person);
其中的 personSoftReference 被称为软引用,引用的是 new Person() 这个对象;
3、弱引用(Weak Reference)是比软引用弱一级的引用,只要被垃圾回收器(garbage collection)扫描到就会被即刻回收,不管内存够不够。弱引用通常与引用队列(Reference Queue)一起使用,垃圾回收器在回收弱引用关联的对象之前会先将其放入到引用队列中,我们可以监听这个引用队列(Reference Queue),当引用队列中有了此对象,那么就可以在其被回收前做我们的操作。示例代码如下:
Person person = new Person();
WeakReference<Person> personWeakReference = new WeakReference(person);
其中的 personSoftReference 被称为弱引用,引用的是 new Person() 这个对象;
4、虚引用(Phantom Reference)是“最弱”的一种引用,可有可无的引用,也可以理解为几乎没有引用,随时可能被垃圾回收器(garbage collection)回收掉;事实上也是如此,一旦被垃圾回收器(garbage collection)扫描到就即刻被其回收。主要用于追踪垃圾回收器的行为。虚引用和弱引用一样,通常和引用队列(Reference Queue)一起使用,当垃圾回收器(garbage collection)回收弱引用关联的对象前将其放入到引用队列中,同样的我们可以监听这个队列,一旦有新的虚引用被放入就执行我们预定好的程序。示例代码如下
Person person = new Person();
PhantomReference<Person> personPhantomReference = new PhantomReference(person);
其中的 personSoftReference 被称为虚引用,引用的是 new Person() 这个对象;
Java 中的四种引用的更多相关文章
- JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例
简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用) ...
- Java中的四种引用
引用定义 实际上,Java中存在四种引用,它们由强到弱依次是:强引用.软引用.弱引用.虚引用.下面我们简单介绍下这四种引用: 强引用(Strong Reference):通常我们通过new来创建一个新 ...
- Java 中的四种引用及垃圾回收策略
Java 中有四种引用:强引用.软引用.弱引用.虚引用: 其主要区别在于垃圾回收时是否进行回收: 1.强引用 使用最普遍的引用.如果一个对象具有强引用,那就 类似于必不可少的生活用品,垃圾回收器绝不会 ...
- Java中的四种引用方式
无论是通过引用计数算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与"引用"有关.在Java语言中,将引用又分为强引用.软引用.弱引用 ...
- Java入门系列 Java 中的四种引用
Why java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象. java对象的引用包括强引用,软引用,弱引用,虚引用 Java中提供这四种引用类型 ...
- java中的四种引用方式(强引用,软引用,弱引用,虚引用)
java内存管理主要有内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指向该对象. java中对象的引用主要有四种:强引用,软引用,弱引用,虚引用. Java中提供这四种引 ...
- Java中的四种引用(强引用、软引用、弱引用、虚引用)
以下内容摘自<深入理解Java虚拟机 JVM高级特性与最佳实践>第2版,强烈推荐没有看过的同学阅读,读完的感觉就是"原来学的都是些什么瘠薄东西(╯‵□′)╯︵┴─┴" ...
- Java中的四种引用和引用队列
目录 强引用 软引用 弱引用 幻象引用 Reachability Fence 参考 强引用 正常的引用,生命周期最长,例如 Object obj = new Object(); 当JVM内存不足时,宁 ...
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
随机推荐
- luogu1632 点的移动
其实只需要开三重循环 根据OI中的一个重要的原理 给定一个序列a,求一个数x使得\(\sum |a_i-x|\)最小,那么这个数是序列a的中位数 证明略 然后既然是中位数,一定是数列中的数,类比到这题 ...
- kuangbin专题七 HDU1540 Tunnel Warfare (前缀后缀线段树)
During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...
- eclipse项目中的java文件导入后变为空心J问题
1,选择工程名字右键——>属性——>JavaBuild Path会看到右侧Source标签中为空白 2,点击Add Folder...选择如图所示的src包和相关的配置文件包,点击确定: ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_对象的相等性和同一性
[重写Equals注意的事项] 1. Equals 必须是自反的:--x.Equals(x)肯定为 true 2. Equals 必须是对称的:--x.Equals(y)肯定返回与y.Equals(x ...
- Python模块:operator简单介绍
Python官方文档地址:https://docs.python.org/3.6/library/operator.html?highlight=operator Operator提供的函可用于对象比 ...
- 电脑c盘爆满检查与设置
C盘文件爆满,先检查是那个文件造成的 操作方法:打开文件夹选项,将“隐藏受保护的操作系统文件(推荐)”前的勾选去掉,然后打开系统盘查看是那个文件占用空间大 Hiberfil.sys文件删除方法: 1. ...
- 【ACM】三点顺序
三点顺序 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,现在让你判断A,B,C是顺时针给出的还是逆 ...
- Vue.js-----轻量高效的MVVM框架(十一、使用slot分发内容)
#单个slot html: <h3>#单个slot</h3> <!-- 定义child01模板 --> <template id="child01& ...
- JedisCluster 链接redis集群
先贴代码: <!-- redis客户端 --><dependency> <groupId>redis.clients</groupId> <a ...
- vue 组件之间数据传递(七)
1.props:父组件 -->传值到子组件 app.vue是父组件 ,其它组件是子组件,把父组件值传递给子组件需要使用 =>props 在父组件(App.vue)定义一个属性(变量)sex ...