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 ...
随机推荐
- 【规律】Gym 100739L Many recursions
给出a,求递归式g(k)的初始条件g(0); 可以看出来g(a) = 1,从后往前推.写个模拟程序可以看出来其实g(0) = 2^a,那么就是一个简单地快速幂取模问题了. #include <c ...
- An error has occurred. See error log for more details. java.lang.NullPointerException
今天重新新建一个eclipse的空间,就报了这么一个错误,百度找了很多,发现不对头,都不行.后来点开错误一看,原来是web.xml里面没有文件头造成的. 解决办法:只需要在web.xml文件里添加文件 ...
- list与str互转
import stringstr = 'abcde' list = list(str)list['a', 'b', 'c', 'd', 'e']str'abcde'str_convert = ''.j ...
- 图像标注工具labelImg安装记录
这里仅记载下labelImg的安装过程,因为有坑. 我的安装方式是从源码编译,环境ubuntu16.04,一开始是使用python2安装,从github上下载好源码,然后执行安装命令 sudo apt ...
- [PowerShell]template engine
今天讨论的是如何在Powershell里实现一个简单的Template Engine的功能. 假设模板文件的内容如下:template.tt hello $name welcome $company ...
- freemarker 定义公共header
<#--公共顶部--> <#macro header title="默认文字" keywords="默认文字" description=&qu ...
- SQL-Error-1
错误描述:String or binary data would be truncated. 原因:字段长度不够
- Codeforces Beta Round #87 (Div. 2 Only)-Party(DFS找树的深度)
A company has n employees numbered from 1 to n. Each employee either has no immediate manager or exa ...
- Java的JsonHelper
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <g ...
- rpm命令相关
### .列出所有安装过的包 rpm -qa | grep sql ### .如何获得某个软件包的文件全名. rpm -q mysql ### .rpm包中的文件安装到那里 rpm -ql lrzsz ...