1、概述

对长时间没有被使用的对象进行回收、清除。

2、判断对象是否可以被回收

引用计数法:
每个对象都会被JVM添加计数器,每次被引用就+1,引用失效就-1;如果为0就是可以回收对象。但是无法解决循环引用的问题。

可达性分析算法:
通过GC ROOT的对象作为搜索起始点,通过引用向下搜索,所走过的路径称为引用链。
如果线程活着,那么线程中的引用必须活着,静态属性也必须活着,这些引用就是GC ROOT,如果对象和GC ROOT没有任何直接或者间接的联系,那么该对象就是可回收对象。而和GC ROOT有关系的对象都必须活着。
性能比较低,有内存碎片。

3、为了实现回收快速、减少内存碎片,于是就出现了垃圾分类

常用分类:老年代(Old Gen)、新生代(Young Gen)、永久代(Metaspace)
垃圾回收机制(GC)
垃圾回收机制(GC)
新生代Young Gen又分为Eden Space、Survior Space,Java中99%的对象生命周期很短暂,基本都在Eden 中度过。
Eden满了以后,会触发MinorGC–应用复制算法,少数存活下来的对象,被移动到Survior区域中,并且在两边来回复制。大部分对象也会在Survior区域中死去。
当对象在Survior中来回复制时,会有一个寿命增长,当增长到一定值时,对象就会被移动到Old区域。
当MinorGC进行多次后,Old区域也满了,就会触发MajorGC机制。MajorGC机制一定是被某次MinorGC连同出发所以又叫FullGC。
FullGC常用算法标记-整理:没有内存碎片。可达性分析是基于静态时间分析出来的,如果应用程序继续执行,可达性分析出的结果可能就有问题了,所以要暂停程序。

相关文章:

  • 2022-02-13
  • 2021-07-22
猜你喜欢
  • 2021-11-20
  • 2021-10-15
  • 2021-07-12
相关资源
相似解决方案