GC基础

原创
2020/08/06 15:48
阅读数 25

GC垃圾回收算法:就是垃圾怎么找到

引用计数:一个对象被引用的次数,当是0的时候被回收;

根可达算法:以下四个就是根,程序启动的时候需要的对象,第一个main,静态变量。常量池、JNI指针这是个根,需要哪些对象,这四个不需要的方法就会被回收

GC垃圾回收机制:垃圾是怎么清除的

标记清除:第一次扫描把有用的标记出来,第二次扫描把可回收的标记一下,然后进行清除变为空闲,容易产生碎片

拷贝:把内存分为两块,把有用的copy到第二块,copy结束后把第一块内存全部清除,copy结束以后对象引用的地址发生改变,需要进行复制移动,不会产生碎片

标记压缩:有用的空间前移,没有碎片,扫描两次,第一次扫描标记有用的,第二次扫描把有用的前移,扫描并移动

JVM内存分代模型:新生代分为三个区域,老年代一个区域,对象分配到新生代的eden区,经历一次回收,没有被回收的,会copy到幸存者区,在幸存者区多次没有被回收就会进入老年代

垃圾回收器

Serial(新生代)垃圾回收器,Serial Old(老年代)垃圾回收器 ,原理相同都是垃圾回收的时候stw(停止)然后垃圾回收线程工作

Parallel(新生代)垃圾回收器,Parallel Old(老年代)垃圾回收器,其他工作线程停止,垃圾回收线程并发执行

ParNew(新生代)垃圾回收器,CMS(老年代)垃圾回收器,新生代垃圾回收器,工作线程停止,垃圾回收器线程并发执行;CMS初始标记时,工作线程停止,标记根上面的对像,并发标记是垃圾线程与工作线程并发执行,重新标记是标记运行前期间产生的垃圾,工作线程停止,然后并发处理,工作线程与垃圾处理线程并发运行;

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部