欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面试刷题25:jvm的垃圾收集算法?

程序员文章站 2022-07-09 18:45:58
垃圾收集是java语言的亮点,大大提高了开发人员的效率。 垃圾收集即GC,当内存不足的时候触发,不同的jvm版本算法和机制都有差别。 我是李福春,我在准备面试,今天的问题是: jvm的垃圾回收算法有哪些?有哪些垃圾收集器? 答:jvm的垃圾回收首先需要标注出可回收的对象,采用的是可达图算法(从对象出 ......

面试刷题25:jvm的垃圾收集算法?

垃圾收集是java语言的亮点,大大提高了开发人员的效率。
垃圾收集即gc,当内存不足的时候触发,不同的jvm版本算法和机制都有差别。

我是李福春,我在准备面试,今天的问题是:

jvm的垃圾回收算法有哪些?有哪些垃圾收集器?

答:jvm的垃圾回收首先需要标注出可回收的对象,采用的是可达图算法(从对象出发,绘制出出对象的引用关系图,
当从活动对象出发,在图中不可达的对象即可标注为可回收对象)

jvm的垃圾回收算法有3种,列举如下:
1, 标记清除算法。(即把标注的可回收对象直接清理,这样会带来内存碎片化的问题,而且效率不高);
2,标记整理算法。(即把标注的可回收对象清理,在清理的过程中整理内存,解决了内存的碎片化问题);
3,标记复制算法。(把标注的对象清理,没有清理的对象复制到to区,然后互换引用,解决了内存碎片化的问题,但是需要维护对象关系带来一定代价)

垃圾收集器常见的有如下4种,随着jdk的版本迭代在不断增加。列举如下:
1,serialgc , 即单线程垃圾回收,优点是简单,缺点是会引起stop-the-world的问题,是早期版本的垃圾收集器
2,parallelgc,即并行垃圾收集器,(新生代,老年代的收集是并行的),适合吞吐量比较的场景;
3,cmsgc,响应时间优先的垃圾收集器,适合web应用,会带来内存碎片化的问题。
4,g1gc,兼顾响应时间和吞吐量的垃圾收集器,才有分区棋盘的方式进行内存整理,是java8的默认垃圾收集器;

垃圾回收的过程

垃圾回收主要集中在两个区域:按照java虚拟机内存模型,即堆区,方法区的元数据区;

堆区垃圾收集过程如下:

1,对象创建后放在堆的新生代的eden区;

2,当内存不足的时候或者周期性的触发minorgc,把没有标记的对象复制到survive区,标记的对象直接回收;

3,jvm的生存周期内不断的循环: 触发minorgc,service区转换为from区,不断的把eden和from区还存在的对象复制到to区,
并进行整理,防止碎片化;把存在周期超过jvm设置的阈值的对象复制到老年代old区;

4,当真个堆区内存不足的时候,触发fullgc,重新整理eden,from,to,old区,一般会造成系统的处理能力急速下降。

元数据区的垃圾回收:主要是当某些类型不再使用的时候,从元数据区卸载。

小结

本篇回答了垃圾回收的标记算法,垃圾回收的算法,常见的垃圾收集器,垃圾回收的过程。

面试刷题25:jvm的垃圾收集算法?

原创不易,转载请注明出处。