java总10种垃圾回收机制;
(本文内容全部来自马士兵老师的课程,如想细致学习,请到腾讯课堂搜索马士兵教育相关视频)
如何找到垃圾?
1、reference count 引用计数 (python)
缺点:无法找到环形垃圾
2、root searching 根可达性算法 (jvm)
垃圾回收算法?
1、mark sweep 标记清理
缺点:内存碎片化
2、copy 复制算法 内存分成两半,来回复制
缺点:浪费内存
3、mark compact 标记压缩 碎片整理
缺点:效率偏低
分代模型
1、新生代 (copy算法)
a)eden (伊甸)
b)survivor(幸存) 两个分区
2、老年代
new对象的内存流程
配对使用回收器
发展路线,随着内存越来越大来进行演进,逐渐出现新的;垃圾回收机制
STW(stop the world)
1、serial + serial old :单线程串行 存在STW
2、ps + po (parallel scavenge + parallel old):并行 (jdk1.8默认)存在STW,内存越大效率越低
3、ParNew(与ps相同,不同在于配合cms使用) + CMS (concurrent mark sweep首先开始并发回收)
CMS垃圾回收过程:
1)init mark 先进行初始标记 ,STW,先找到最初的引用,时间非常短
2)concurrent mark 并发标记,工作线程和垃圾回收线程的并发
3)remark 重新标记(最终标记),对于在并发标记过程中已标记的对象,可能存在再次被引用的情况,垃 圾回收会对这个对象误删除(漏标或者错标) ,STW
4)concurrent sweep 并发清除
4、G1 :逻辑分代,物理不分代,每个区域成为region,其中每个region可能是eden,survivor或者old。
从G1开始,不再使用分代。
三色标记算法:白灰黑(三色扫描)
CMS:incremental update
ps:存在问题,没有任何版本默认垃圾回收器是cms,标记清除mark sweep导致碎片化占用空间
当碎片化非常严重的时候,cms采用serial old清理老年代,导致STW,一旦产生卡顿,后果很严重
G1 :SATB (snapshot at th beginning)
ZGC:颜色指针
常用的调优命令
java -XX:+PrintCommandLineFlags -version --jvm启动时配置的参数
java -XX:+PrintFlagsFinal -version --查看最终参数
jps --查看java进程的id
jinfo "pid" --查看进程的具体明细参数
jstat "pid" --观察进程的jvm情况,命令后添加毫秒数可动态观察
网友评论