JVM 垃圾回收原理
垃圾收集(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堆分成新生代和老年代,根据各自特点采用适当的收集算法
评论