知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。算法
GC算法
学习
1.标记清除算法3d
优缺点:不须要额外空间,可是遍历空间花费大,并且会产生大量内存碎片
对象
2.复制收集算法blog
占用两块同样大内存,每次只用使用一块。当须要发生复制的时候,遍历一遍可达对象,进行复制到另一块内存中。From区转移到To区,或把一下gc次数超过阈值的,转移大Old区。原先的From区,整个清空。ip
优势:只须要遍历一遍内存
缺点:复制成本巨大、占用内存多
开发
3.标记整理算法get
3.1 采用标记-清除算法同样的方式进行对象的标记zsh
3.2 采用复制清除算同样将全部的存活对象往左端空闲空间移动
3.3 在一块内存上操做,避免产生碎片
优缺点:相对标记清除来讲,没有了内存碎片,可是遍历花费仍然很大。
4. GC根据堆内存空间不一样区域,采用不一样的算法回收
4.1 Young区: 复制收集算法
缘由:对象较少,复制代价小
4.2 老区和方法区:标记清除或标记整理算法
缘由:对象存活较多,次数少,较慢
其余知识点:
1、GC 根
1.栈中引用的对象
2.方法区中的静态成员
3.方法区中常量引用的对象 全局变量
4.本地方法栈中JNI 本地Native方法
2、可到达性分析
1.从任意根对象到某个对象均不可达时,这个对象就能够被回收。 平常开发中,常常碰到某个大对象,也就是临时使用下,而后抛弃。这个时候能够有个好习惯,就是用完后赋值 null。可能不会当即被gc掉,可是有助于计算。
2. 当一个对象不在引用链上,这个时候可能想象成一张图,对于孤岛中的对象,就能够gc掉。
3、实际中 JVM的gc算法
1. 分代收集算法, 区分出 新生代GC 和 老年代GC
2. 新生代 适合复制算法,这个区对象生产太频繁,相应的GC也频繁,使用这种空间换时间的收集算法比较合算。
3. 老年代 适合标记清理或标记整理,这个区的对象成活率高,GC不须要很频繁。
4、可触及性
可触及的
可复活的
不可触及的
本文由zshipu.com学习笔记或整理或转载,若有侵权请联系,必改之。