垃圾回收的算法和原理:
1、垃圾对象确认算法:
Tracing | RC | |
---|---|---|
概念 | 可达性算法,是否从root可达 | 引用计数法,被引用次数 |
优点 | 准确 | 快 |
缺点 | 遍历慢 | 不准确,会出现循环引用 |
制0,循环全为0,则全是可回收对象 |
2、堆中对象的存放方式及其对应的GC算法:
free-list | 指针 | |
---|---|---|
先分区:1kb的list、2kb的list | 存放对象后指向下一个地址 | |
特点 | 内存不连续 | 内存连续 |
GC算法 | 标记清除算法 | 复制清除算法、标记整理算法 |
3、现有GC算法的特点
垃圾算法 | 特点 |
---|---|
CMS | 因为它使用并发,线程和回收线程并发执行,注重停顿时间 |
ZGC | 注重停顿时间和扩展性: |
G1 | 注重的是高吞吐量和停顿时间 |
parallel、serial | 注重高吞吐量 |
4、串行GC和并行GC的特点
串行GC | 并行GC | 并发GC |
---|---|---|
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rim6ug2P-1598162319307)(C:\Users\c50013006\Desktop\串行GC.png)] | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YChzkYQs-1598162319308)(C:\Users\c50013006\Desktop\并行GC.png)] | [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H4UmuYmE-1598162319309)(C:\Users\c50013006\Desktop\并发GC.png)] |
提高吞吐量 | 降低延迟时间 |
5、GC前的准备工作:
GC前要找到安全点才能发出握手,等多个线程都握手后可以触发GC,
编译器在触发GC时候需要创建一个map来记录对象中或者栈中的字段是值还是引用
译器在触发GC时候需要创建一个map来记录对象中或者栈中的字段是值还是引用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cS7RbabF-1598162319232)(C:\Users\c50013006\AppData\Roaming\Typora\typora-user-images\image-20200822112055876.png)]