前言
很多小伙伴们都提到过去面试的时候,经常有面试官问到知道强引用、软引用、弱引用、虚引用吗?他们各自的特点是什么?很多老司机对这些也不是太了解,今天老顾就来介绍一下。
垃圾回收
我们都知道java的JVM有垃圾回收机制,GC判断堆中的对象实例或数据是不是垃圾的方法有引用计数法和可达性算法两种。
无论是通过引用计数算法判断对象的引用数量,还是通过根搜索算法判断对象的引用链是否可达,判定对象是否存活都与“引用”有关,即是否要把这些对象视为垃圾回收掉
引用
我们先来说说什么是引用?Java中的引用,类似 C 语言中的指针。初学 Java时,我们就知道 Java数据类型分两大类,基本类型和引用类型。
基本类型:编程语言中内置的最小粒度的数据类型。它包括四大类八种类型:
4种整数类型:byte、short、int、long 2种浮点数类型:float、double 1种字符类型:char 1种布尔类型:boolean
引用类型:引用类型指向一个对象,不是原始值,指向对象的变量是引用变量。
在Java里,除了基本类型,其他类型都属于引用类型,它主要包括:类、接口、数组、枚据、注解
如:Person person = new Person("张三");
这里的person就是指向Person实例“张三”的引用,我们一般都是通过person来操作“张三”实例。
在 JDK 1.2 之前,Java 中的引用的定义很简单,一个对象只有被引用或者没有被引用两种状态。也就是代表了要么被回收,要么继续保持着,没有中间的缓存场景。
在 JDK 1.2 之后,Java 对引用的概念进行了扩充,将引用分为
强引用(Strong Reference) 软引用(Soft Reference) 弱引用(Weak Reference) 虚引用(Phantom Reference)
这四种引用强度依次逐渐减弱。
Java 中引入四种引用的目的是让程序自己决定对象的生命