面试刷题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,兼顾响应时间和吞吐量的垃圾收集器