JVM基础知识学习
1.为什么要进行GC?
2.如何进行GC?
分为两个阶段:
一.垃圾标记阶段
(1).判断对象是否存活;
(2).什么样的对象会被标记为死亡:当一个对象已经不再被任何存活的对象继续引用时,就可以宣判为已死亡;
(3).判断对象是否存活一般有两种方式:引用计数算法,可达性分析算法
二.引用计数算法
(1).概述:
(2).优点:
(3).缺点:
(4).应用:
(5).python是在使用引用计数算法时如何解决循环引用问题的?
三.可达性分析算法(或称为根搜索算法、追踪垃圾收集)
(1).概述:
(2).实现思路:
(3).GC Root包括那些类别的元素:
(4).可达性分析算法执行的必要条件(还有一些临时性的元素可以加入):
四.Finalization机制
五.MAT和JVisualVM结合查看GC Root
六.使用JProfiler分析OOM
七.垃圾清除阶段:
(1).概述:成功区分内存中存活的对象和死亡的对象后,GC接下来的任务就是执行垃圾回收,释放掉无用的对象所占用的内存空间,以便有足够的可用内存空间为新对象分配内存
(2).常用的垃圾清除算法:标记-清除算法、复制算法、标记-压缩算法
八.标记-清除(Mark-Sweep)算法:
(1).执行过程-标记:
(2).清除:
(3).优点:
(4).缺点:
(5).何为清除:这里所谓的清除并不是真的置空,
九.复制(Copying)算法
(1).背景:
(2).核心思想:
(3).优点:
(4).缺点:
(5).适合的应用场景:
十.标记压缩(或标记整理、Mark - Compact)算法
(1).背景:
(2).执行过程:
(3).优点:
(4).缺点:
十一.指针碰撞:
十二.对比三种算法:
十三.分代收集算法:
十四.增量收集算法:
(1).概述:
(2).缺点:
十五.分区算法: