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 ...
随机推荐
- ios配置xmpp即时聊天-服务器端
一.安装 到MySQL官网上http://dev.mysql.com/downloads/mysql/,下载mysql可安装dmg版本 比如:Mac OS X ver. 10.7 (x86, 64-b ...
- python学习过程(四)
上节我们说了怎么从一个网页中获取所有的a标签,包括a标签的文本和a标签的url,以及最后经过整理,直接从网页中获取key-value键值对,也就是标签:url这种形式. 例如 : 百度: http:/ ...
- LCA【洛谷P2971】 [USACO10HOL]牛的政治Cow Politics
P2971 [USACO10HOL]牛的政治Cow Politics 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N.恰好有N-1条单位长度的双向 ...
- linux物理内存管理
1.为什么需要连续的物理内存: Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了.利用分页管理有助 ...
- kuangbin专题七 HDU3974 Assign the task (dfs时间戳建树)
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...
- vue.js组件之j间的通讯一 子组件接受父祖件数据
Vue2.0的三种常用传值方式.父传子.子传父.非父子组件传值 在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来.这时必然会产生一些疑问和需求?比如一个组件 ...
- 使用esp32-Arduino+PubSubClient+mqtt 上传数据到中移动OneNet
使用esp32-doit-dev-v1开发板,测试mqtt协议, 发布(publish)到onenet 平台.注意:1.使用的mqtt arduino 客户端是 pubsubclient 库.其默认是 ...
- git 工作中常用命令
git 命令: git init : 初始化 git add . :添加所有文件 git status :查看状态 若果是第一次会提示你输入你的 邮箱 和姓名: git commit ...
- 计算机学院大学生程序设计竞赛(2015’12)The collector’s puzzle
Problem Description There is a collector who own many valuable jewels. He has a problem about how to ...
- 2015苏州大学ACM-ICPC集训队选拔赛(1) 1007
连通图 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissio ...