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).缺点:

十五.分区算法: