Java基础内容之四大引用

简介: new 对象并指向引用变量的都是强引用,开发中大部分都是强引用。对于强引用,JVM宁愿报错`OutOfMemoryError`错误,是程序异常终止,也不会回收强引用来解决内存, 对这类情况,可以通过赋值强引用对象=null,从而被JVM回收。但是一般我们在方法中定义的强引用,会存在方法栈中,当方法运行完,退出,此时方法中的强引用也会因为引用数为0,从而被回收。

作者: 西魏陶渊明
博客: https://blog.springlearn.cn/

一、概念

1. 强引用

new 对象并指向引用变量的都是强引用,开发中大部分都是强引用。对于强引用,JVM宁愿报错OutOfMemoryError错误,是程序异常终止,
也不会回收强引用来解决内存, 对这类情况,可以通过赋值强引用对象=null,从而被JVM回收。
但是一般我们在方法中定义的强引用,会存在方法栈中,当方法运行完,退出,此时方法中的强引用也会因为引用数为0,从而被回收。

2. 软引用

在内存充足情况下,GC不会回收软引用对象,如果内存空间不足了,才会回收这些对象的内存。也正因为这个特性,所以软引用经常用作缓存对象使用。

3. 弱引用

任意GC都会清理掉软引用对象,弱引用是最容易记的,任何的GC动作都会将弱引用对象给回收掉。

4. 虚引用

和其他三个不一样,这个不对生命周期,有影响,而是当要回收时候,加入到Queue队列中

二、在JDK中的体现

引用说明 用途 生存时间 被垃圾回收时间
Object 默认new出来的都是强引用 对象正常状态 JVM停止或者无引用被回收 无任务对象使用
SoftReference 软引用 常用作缓存 当内存不足时候终止 内存不足时候回收
WeakReference 弱引用 常用作缓存 垃圾回收后终止 任何垃圾回收时
PhantomReference 虚引用 用于跟踪对象是否被回收 垃圾回收后终止 任何垃圾回收时
相关文章
|
3月前
|
安全 Java
从零开始学习 Java:简单易懂的入门指南之不可变集合、方法引用(二十六)
从零开始学习 Java:简单易懂的入门指南之不可变集合、方法引用(二十六)
|
3月前
|
存储 Java
最新Java基础系列课程--Day10-IO流文件处理(一)
最新Java基础系列课程--Day10-IO流文件处理
|
1天前
|
Java
Java基础之对象的引用
Java基础之对象的引用
5 0
|
21天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
23 4
|
1月前
|
存储 Java C语言
【Java】以数组为例简单理解引用类型变量
【Java】以数组为例简单理解引用类型变量
14 1
|
1月前
|
缓存 Java
Java四个引用
Java四个引用
|
1月前
|
Java
[java进阶]——方法引用改写Lambda表达式
[java进阶]——方法引用改写Lambda表达式
|
2月前
|
缓存 分布式计算 Java
Java基础深化和提高-------IO流
Java基础深化和提高-------IO流
108 0
|
3月前
|
缓存 Java Apache
最新Java基础系列课程--Day10-IO流文件处理(三)
最新Java基础系列课程--Day10-IO流文件处理
|
3月前
|
Java
最新Java基础系列课程--Day10-IO流文件处理(二)
最新Java基础系列课程--Day10-IO流文件处理