JVM 垃圾回收原理

用户头像
飞雪
关注
发布于: 2020 年 08 月 02 日

垃圾收集(Garbage Collection)需要完成3件事情:

1哪些内存需要回收what

2什么时候回收   when

3如何回收  how

 

究竟回收哪些对象,先得从jvm的内存运行时区域说起,由于程序计数器,虚拟机栈及本地方法随线程而生,随线程而灭,不会过多考虑回收问题,而针对java堆和方法区这部分内存分配和回收是动态的,故需要做进一步处理。

死亡判定-可达性分析(Reachability Analysis):基本思路为通过一些列“GC Roots”duixiang作为起始点,开始向下搜索,所过路径成为引用链(Reference Chain)当对象到GC Roots没有任何引用链时,则证明此对象不可用,即可被判定为GC对象。

关于回收算法,大概分为如下几类:

1标记-清除法

 即先标记后清除

2复制算法

  将可用内存分成容量大小相等的块,每次用1块,当用尽时将存活的对象复制到另一块,再把已使用的内存空间做一次性清理

3标记-整理算法

标记过程如“标记-清除”中的标记步骤,但后续步骤不是直接清理,而是让所有活对象向一端移动,然后清理掉边界以外的内存即整理

4分代收集算法

  把java堆分成新生代和老年代,根据各自特点采用适当的收集算法



用户头像

飞雪

关注

那少年 2017.10.31 加入

一入研发深似海, 但求一叶孤舟行。 若问前路无知己, 天亮不负少年行

评论

发布
暂无评论
JVM 垃圾回收原理