其他分享
首页 > 其他分享> > JVM垃圾回收机制

JVM垃圾回收机制

作者:互联网

垃圾回收机制

对象称为垃圾的判断依据

在堆空间和元空间中,GC这条守护线程会对这些空间开展垃圾回收工作,那么GC如何判断这些空间的对象是否是垃圾,有两种算法:

对象被引用,则计数器+1,如果计数器是0,那么对象将被判定为垃圾,于是被回收。但是这种算法没有解决循环依赖的对象,因此JVM目前主流的厂商没有采用这种算法。

在这里插入图片描述

对象中的finalize方法

Object类中有一个finalize方法,也就是说任何对象都有一个finalize方法,这个方法是对象被回收前的最后一个救命稻草

对象的逃逸分析

在jdk1.7之前,对象的创建都是在堆上完成的,但是会有个问题,方法中的未被外部访问的对象。

这种对象没有被外部访问,且在堆空间上频繁创建,当方法结束,需要被gc,浪费了性能

所以在1.7之后,就会进行一次逃逸分析(默认开启),于是这样的对象就直接在栈上创建,随方法的出栈而被销毁,不需要进行GC,减轻了垃圾回收的压力。

在栈上分配内存的时候:会把聚合量替换成标量,减少栈空间的开销,也为了防止栈上没有足够连续空间来创建对象。

垃圾回收算法

标记清除算法、复制算法、标记整理算法

标记清除算法

在这里插入图片描述

复制算法

在这里插入图片描述
注:元空间中新生代的幸存者s0、s1区就是使用的复制算法

标记整理算法

在这里插入图片描述

标记存活对象,让所有存活对象向一端移动,再清除其后所有可回收内存。

分代收集算法

在这里插入图片描述

在进行minor gc时,什么样的对象会进入老年代:

对象进入到老年代的条件

在这里插入图片描述

标签:finalize,对象,回收,算法,gc,垃圾,JVM,minor
来源: https://blog.csdn.net/CAUC_yangxiao/article/details/121729652