01-010 【jvm】垃圾回收之回收算法(重点)

谈谈垃圾回收收集方式,jvm,GC的理解
4种,是什么,优缺点,怎么用

概述

GC是什么?
分代收集算法:次数上频繁收集young区,次数上较少收集old区,基本不动元空间
GC算法总体概述:
在这里插入图片描述
GC不是三块区域一起回收,大部分在回收新生代
Minor GC和 FUll GC
MinorGC发生频繁,FullGC也叫MajorGC的速度比MinorGC慢10倍以上。

引用计数法

缺点:每次对象赋值时均要维护引用计数器,且计数器本身有一定消耗;循环引用会引起内存泄露
jvm的实现一般不用这种

复制算法

年轻代中使用的Minor GC,这种GC算法采用的是复制算法
优点:没有内存碎片;
缺点:占用双倍内存空间。
复制过程中完成整理,左侧直接全部清空后交换两位置。
在这里插入图片描述
在这里插入图片描述

标记清除(Mark-Sweep)

老年代一般是由标记清除或者是标记清除与标记整理的混合实现。
算法先把没被GC root引用的对象标记起来,再统一回收对象。
对象所释放内存的起始地址首尾记录下来,放入空闲地址列表,下次有需要的时候可以进行内存分配。
优点:不需要空间;
缺点:两次扫描,耗时严重;但空间不连续,易产生内存碎片,新对象可能存不进去。
在这里插入图片描述

标记整理(Mark-Compact)

标记清除,再次扫描,向一段滑动存活对象。
优点:没有内存碎片;
缺点:对象在整理过程中,内存地址发生变化,耗时最长,速度慢。
在这里插入图片描述
ps.实际工作中可以采取标记-压缩-清除,标记清除和标记压缩结合,进行多次GC后才Compact

分代收集,没有最好的算法,每一代根据它的特性选择对应的算法。

各个算法的优缺点?
内存效率:复制算法>标记清除算法>标记整理算法
内存整齐度:复制算法=标记整理算法>标记清除算法
内存利用率:标记整理算法=标记清除算法>复制算法

java8之后java9默认的G1垃圾回收器达到了速度快,无内存碎片的目的。

学习整理于解密JVMjvm2019.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值