java虚拟机面试干货(六)— 垃圾回收:垃圾收集器

本文我们说说垃圾收集器,先明确几个概念:
串行(serial):单线程,按顺序依次执行多任务;
并行(Parallel):多线程,多个相同任务在一个实体上执行;
并发(Concurrent):多线程,多个不同任务在一个实体上执行;
明确好上面概念以后,有助于我们介绍下面的垃圾收集器:

Serial收集器

顾名思义,是一个单线程串行垃圾回收器,使用的是复制算法,运行时会stop the word。
但并非一无是处,在单核系统上运行减少了上下文交互开销,如果gc不是频繁发生可获得较高的单线程回收效率。它依然是默认的新生代回收器。

ParNew收集器

相当于serial收集器的多核版,也采用复制算法,并行,运行时仍然stop the world。JDK 5引入CMS收集器后,它是默认的和CMS收集器搭配的新生代收集器。不过在单核系统中,并不比serial收集器效率高。

Parallel Scavenge收集器

和ParNew收集器描述基本一样,区别在于实现:ParNew收集器设计思路是缩短系统停顿时间,而Parallel Scavenge收集器是控制吞吐量。吞吐量=CPU运行用户代码时间/(CPU运行用户代码时间+垃圾回收时间),可惜它无法与CMS收集器搭配使用。

Serial Old收集器

相当于serial收集器的老年代版,同样是单线程串行,运行时会stop the wolrd,不过它采用的是标记-整理算法。

Parallel Old收集器

相当于Parallel Scavenge收集器的老年代版,并行,运行时会stop the wolrd,采用的是标记-整理算法,强调吞吐量优先。

CMS收集器

即Concurrent-Mark-Sweep,并发标记清除收集器。从名字可知,它是一个并行的、基于标记-清除算法实现的老年代收集器。它的运作过程分为4个步骤:初始标记、并发标记、重新标记和并发清除。其中初始标记和重新标记需要stop the world。
初始标记:标记目标对象是否可达;
并发标记:将不可达对象标记为垃圾对象;
重新标记:确认垃圾对象仍然没有根引用;
并发清除:清理垃圾对象;
它的优点是低停顿,缺点有三:
1.对CPU资源敏感,运行时可能造成应用程序变慢;
2.无法处理浮动垃圾(GC过程中产生的新垃圾),可能出现”Concurrent Mode Failure”(GC期间预留内存无法满足需要)而导致Full GC;
3.基于标记-清除算法,产生大量内存碎片;

G1GC

JDK 7引入。此部分知识很多,后面有机会会单独提出个专题总结,这里先略过。

下篇文章回到主线,说说加载class到内存后,JVM是如何执行代码的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值