2、标记–清除算法(Mark-Sweep) 为每个对象存储一个标记位,记录对象的状态(活着或是死亡)。 分为两个阶段,一个是标记阶段,这个阶段内,为每个对象更新标记位,检查对象是否死亡;第二个阶段是清除阶段,该阶段对死亡的对象进行清除,执行 GC 操作。 3、标记–整理算法 标记-整理法是标记-清除法的一个改进版。同样,...
下面将介绍JVM的四种主要的GC算法。 1. 标记-清除算法(Mark-Sweep Algorithm): 标记-清除算法是最基本的GC算法,它分为两个阶段。首先,标记阶段会从根对象开始,标记所有被引用的对象。然后,在清除阶段,未被标记的对象将被回收,回收的内存空间将被添加到可用的内存池中。虽然这种算法能够回收没有引用的对象,但它...
第一种GC算法:标记清除算法 没有被打上标记的对象,被清除掉。 第二种GC算法:标记清除-整理算法 第一步:没有被打上标记的对象,被清除掉。 第二步:将内存碎片整理合并。 第三种GC算法:分代+复制算法 Eden区满了触发GC, 第一步:Eden区加From区的对象,进行标记,还被引用的对象打上标记。 第二步:将已经被...
根可达算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 JVM常用GC算法 引用计数(被JVM淘汰,了解即可) 这个算法非常简单,简单来说就是:给对象添加一个引用计数器,每当有一个地方引用它时,计数器加1;当引用失效时,计数器减1;任何时刻计数器为0的对象就是不可能再被使用的。但是此算法有个致命缺陷无法解...
GC算法应该算是老生常谈了,经典就那四种算法,分别是标记-清理算法,复制算法,标记-整理算法,分代收集算法。尽管网上已经有各种描述,还是想按我的理解描述一下,就讲讲猪仓库,为什么是猪,是一个活物呢,因为…
那么,垃圾回收有几种算法呢?通常来说,JVM的垃圾回收算法一共有以下几种。 一、串行GC(Serial GC) 串行GC是很简单的一种GC算法,它对年轻代使用 mark-copy(标记-复制) 算法,对老年代使用 mark-sweep-compact(标记-清除-整理)算法。而这两者都是单线程的垃圾收集器,并不能进行并行处理。因此,两者都会触发全线...
可以作为GC Roots的对象有以下几类: 可达性分析就是JVM首先枚举根节点,找到一些为了保证程序能正常运行所必须要存活的对象,然后以这些对象为根,根据引用关系开始向下搜寻,存在直接或间接引用链的对象就存活,不存在引用链的对象就回收。 关于可达性分析的详细描述,可以看笔者的文章:《大白话理解可达性分析算法》。
4. 常见的GC算法 4.1 标记-清除算法 该算法分为标记和清除两个阶段,标记就是把所有活动对象都做上标记的阶段,清除就是将没有做上标记的对象进行回收的阶段 4.2 复制算法 复制算法就是将内存空间按容量分成两块。当这一块内存用完时,就将存活着的对象复制到另一块上面,然后将已经使用过的一块一块清除掉 ...
需要先找到 GC Root 对象,即那些一定不会被回收的对象,如正执行方法内局部变量引用的对象、静态变量引用的对象。 标记阶段:沿着 GC Root 对象的引用链找,直接或间接引用到的对象加上标记。 清除阶段:释放未加标记的对象占用的内存。 3.GC 与分代回收算法 ...