Java-100天知识进阶-GC算法-知识铺

Posted sblig

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-100天知识进阶-GC算法-知识铺相关的知识,希望对你有一定的参考价值。

知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

GC算法
技术图片

1.标记清除算法

优缺点:不需要额外空间,但是遍历空间花费大,而且会产生大量内存碎片
技术图片

2.复制收集算法

占用两块一样大内存,每次只用使用一块。当需要发生复制的时候,遍历一遍可达对象,进行复制到另外一块内存中。From区转移到To区,或把一下gc次数超过阈值的,转移大Old区。原先的From区,整个清空。

优点:只需要遍历一遍

缺点:复制成本巨大、占用内存多
技术图片

3.标记整理算法

3.1?采用标记-清除算法一样的方式进行对象的标记

3.2 ? ?采用复制清除算一样将所有的存活对象往左端空闲空间移动

3.3 ? ?在一块内存上操作,避免产生碎片

技术图片

优缺点:相对标记清除来说,没有了内存碎片,但是遍历花费仍然很大。

4. GC根据堆内存空间不同区域,采用不同的算法回收

4.1 Young区:? ??? ? ?复制收集算法

? ? ? ?原因:对象较少,复制代价小

4.2 老区和方法区:标记清除或标记整理算法

? 原因:对象存活较多,次数少,较慢

其他知识点:

一、GC 根

1.栈中引用的对象

2.方法区中的静态成员

3.方法区中常量引用的对象 全局变量

4.本地方法栈中JNI 本地Native方法

二、可到达性分析

?1.从任意根对象到某个对象均不可达时,这个对象就可以被回收。 日常开发中,经常碰到某个大对象,也就是临时使用下,然后抛弃。这个时候可以有个好习惯,就是用完后赋值 null。可能不会立即被gc掉,但是有助于计算。

2. 当一个对象不在引用链上,这个时候可能想象成一张图,对于孤岛中的对象,就可以gc掉。

三、实际中 JVM的gc算法

?1. 分代收集算法, ? 区分出 新生代GC 和 老年代GC

?2. 新生代 适合复制算法,这个区对象生产太频繁,相应的GC也频繁,使用这种空间换时间的收集算法比较合算。

?3. 老年代 适合标记清理或标记整理,这个区的对象成活率高,GC不需要很频繁。

四、可触及性

可触及的

可复活的

不可触及的

本文由zshipu.com学习笔记或整理或转载,如有侵权请联系,必改之。

以上是关于Java-100天知识进阶-GC算法-知识铺的主要内容,如果未能解决你的问题,请参考以下文章

Java-100天知识进阶-基本类型-知识铺

Java-100天知识进阶-JVM内存-知识铺

第229天学习打卡(知识点回顾 GC垃圾器)

第230天学习打开(知识点回顾 垃圾回收器2)

Java底层预备知识GC

回收算法&触发条件&GC(Allocation Failure)引发的一些JVM知识点梳理