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 ...
随机推荐
- jmeter-Http信息头管理器
今天遇到的问题是:一个报名接口,用户先要登录后,再去报名.而登录页面:用户名.密码.动态图形验证码,所以不能直接使用jmeter参数传值方法. 测试的时候,需要先登录,获取ticket后,才能去请求下 ...
- memcache (持续了解ing...)
mem cache 英[kæʃ] 美[kæʃ]vt. 贮藏; memcache是一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速度提 ...
- luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛
link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd ...
- storm本地可以运行集群出错遇到的问题
storm本地运行和集群运行是存在区别的: 本地可以读取本地文件系统及java项目中的文件,但是提交集群后就不能读取了,storm只是将topology提交到了集群,所以只能在main方法中将需要读取 ...
- pytorch搭建网络,保存参数,恢复参数
这是看过莫凡python的学习笔记. 搭建网络,两种方式 (1)建立Sequential对象 import torch net = torch.nn.Sequential( torch.nn.Line ...
- Python集合字典运算符
1.集合2.字典3.运算符优先级 1.集合 创建:{} set([]) 注意:创建空的集合要用set() 特点:元素唯一,无序 运算: & 交集 | 并集 - 差集 方法: s ...
- 何为 “元组”(Tuple)?
元组是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性. 在二维表里,元组也称为记录.
- Appium appium 基础之键盘处理
方法1 AppiumDriver实现了在上述功能,代码如下(java版本) driver.sendKeyEvent(66);方法2 HashMap keycode = new HashMap();ke ...
- asp.net AD 域验证
1.获取环境变量 string strAuthUser = request.ServerVariables["AUTH_USER"] 以上这行代码是用来获取当前用户的登录名 2.I ...
- Windows下VsCode的简单配置
1. 安装插件 2. 配置终端软件 安装cmder 添加cmder 按下ctrl+shift+p键,输入setting,打开user settings如图: 将 "terminal.int ...