关注
Java执行 GC(垃圾回收)判断对象是否存活有两种方式,分别是引用计数法和引用链法(可达性分析法)。
引用计数:Java堆中给每个对象都有一个引用计数器,每当某个对象在其它地方被引用时,该对象的计数器 +1;引用失效则 -1;
JDK 1.2版本开始,对象的引用被划分为 4种级别,使程序能更加灵活地控制对象的生命周期。这 4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。
正文
(一) 强引用(StrongReference)
在一个线程内,无须引用直接可以使用的对象,强引用不会被JVM清理。我们平时申明变量使用的就是强引用,普通系统99%以上都是强引 用,比如,String s="Hello World"。
Java中的引用,有点像 C++的指针。通过引用,可以对堆中的对象进行操作。在Java 程序中,最常见的引用类型是强引用,它也是默认的引用类型。例如:StringBuffer str=new StringBuffer(“Hello World”);
当在Java语言中使用new 操作符创建一个新的对象,并将其赋值给一个变量的时候,这个变量就成为指向该对象的一个强引用。而判断一个对象是否存活的标准为是否存在指向这个对象的引用。
强引用具备以下特点:
(1)强引用可以直接访问目标对象。
(2)强引用所指向的对象在任何时候都不会被系统回收。JVM宁愿抛出Out Of Memory异常也不会回收强引用所指向的对象。
(3)强引用可能导致内存泄漏。
通常来说,应用程序内部的内存泄露有两种情况。一种是虚拟机中存在程序无法使用的内存区域,另一种情况是程序中存在大量存活时间过长的对象。
(二) 软引用(SoftReference)
java中使用SoftRefence来表示软引用
软引用是除了强引用外最强的引用类型,我们可以通过java.lang.ref.SoftReference使用软引用。一个持有软引用的对象,它不会被JVM很快回收,JVM会根据当前堆的使用情况来判断何时回收。当堆使用率临近阙值时,才会去回收软引用的对象。只要有足够的内 存,软引用便可能在内存中存活相当长一段时间。通过软引用,垃圾回收器就可以在内存不足时释放软引用可达的对象所占的内存空间。保证程序正常工作。
通过一个软引用申明,JVM抛出OOM之前,清理所有的软引用对象。垃圾回收器某个时刻决定回收软可达的对象的时候,会清理软引用,并可选的把引用存放到一个引用队列(ReferenceQueue)。
(三) 弱引用(WeakReference)
java中使用WeakReference来表示弱引用。如果某个对象与弱引用关联,那么当JVM在进行垃圾回收时,无论内存是否充足,都会回收此类对象。
通过一个弱引用申明。类似弱引用,只不过 Java 虚拟机会尽量让软引用的存活时间长一些,迫不得已才清理。
(四) 虚引用(PhantomReference)
java中使用PhantomReference来表示虚引用。
通过一个虚引用申明。仅用来处理资源的清理问题,比Object里面的finalize机制更灵活。get方法返回的永远是null,Java虚拟机不负责清理虚引用,但是它会把虚引用放到引用队列里面。
虚引用的主要目的是在一个对象所占的内存被实际回收之前得到通知,从而可以进行一些相关的清理工作。弱引用之前的两种引用类型有很大的不同:首先虚引用在创建时必须提供一个引用队列作为参数;其次虚引用对象的get方法总是返回null,因此无法通过虚引用来获取被引用的对象。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26年哪些行业会变好/更差 #
11186次浏览 151人参与
# 卷__卷不过你们,只能卷__了 #
4669次浏览 108人参与
# 去年的flag与今年的小目标 #
5411次浏览 137人参与
# 哪些公司在招寒假实习? #
5427次浏览 57人参与
# 有深度的简历长什么样? #
10919次浏览 210人参与
# 腾讯音乐求职进展汇总 #
146844次浏览 1042人参与
# 入职第一天 #
6638次浏览 134人参与
# 你都用AI做什么 #
4115次浏览 106人参与
# 你不能接受的企业文化有哪些 #
5869次浏览 102人参与
# 写论文的崩溃时刻 #
2456次浏览 70人参与
# 一人分享一道面试手撕题 #
14286次浏览 628人参与
# 办公室恋情是职场大忌吗 #
15327次浏览 31人参与
# 海康威视求职进展汇总 #
553598次浏览 3721人参与
# 央国企投递记录 #
169916次浏览 1632人参与
# 应届生应该先就业还是先择业 #
162552次浏览 825人参与
# 现在前端的就业环境真的很差吗 #
486598次浏览 5830人参与
# 你的秋招进行到哪一步了 #
2478199次浏览 23234人参与
# 实习,不懂就问 #
148127次浏览 1329人参与
# 非技术投递记录 #
678278次浏览 6832人参与
# vivo求职进展汇总 #
263598次浏览 1534人参与
SHEIN希音公司福利 292人发布