性能优化三第九周作业「架构师训练营第 1 期」
请简述JVM 垃圾回收原理
Jvm使用可达性分析堆中不再使用的对象,进行回收的算法有清理,压缩,复制。
清理,标记那些空间可以使用,会产生碎片。压缩则是将对象移到一起,将碎片处理,空出更大块的连续空间。复制则将仍在使用的对象复制到另外一块空间中。
jvm使用分代机制,分为新生代与老年代,新生代又分伊甸区与幸存区from与to区,新生代使用复制算法,将伊甸区仍有引用的对象复制到from区,下一次将伊甸区仍有引用的与from区的复制到to区,保证每次幸存区有一块是空的,如果幸存区存储不下这次复制,将会将一些对象存到老年代中,一些大对象超过幸区存的也会直接进入老年代。
幸存区的对象会经过一次回垃圾回收还存活,他自身的年龄会增加,默认16岁后还存活则进入老年代。
老年代的对象满了则会触发old gc,花的时间会较长,所以尽量在年轻代将不存活的对象回收。
垃圾回收器有serial串行,paralle并行,parnew+cms并发,g1,zgc等。
每次进行垃圾回收时,会stop the world即用户线程停止工作。
版权声明: 本文为 InfoQ 作者【天天向善】的原创文章。
原文链接:【http://xie.infoq.cn/article/e43f171b519c08b6fb7e4c7ce】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论