JVM垃圾回收器

垃圾回收器


垃圾收集器是垃圾回收的实际实现者,垃圾回收算法是方法论。

垃圾回收器分类

按线程数量:

1.单线程垃圾回收器:只有一个线程进行垃圾回收,使用于小型简单的使用场景,垃圾回收时,其他用户线程会暂停

Serial Serial old

2.多线程垃圾回收器:多线程垃圾回收器内部提供多个线程进行垃圾回收,在多 cpu 情况下大大提升垃圾回收效率,但同样也是会暂停其他用户线程

Parallel

按照工作模式分:

1.独占式:垃圾回收线程执行时,其他线程暂停

2.并行式:垃圾回收线程可以和用户线程同时执行(某些阶段)

按工作的内存区间分:

1.年轻代垃圾回收器

2.老年代垃圾回收器

垃圾回收性能指标

用户线程的暂停时间;垃圾回收时,用户线程暂停的时间

吞吐量:用户代码运行时间占总时间的比例(总运行时间为用户代码运行时间加垃圾回收时间)

回收的速度;

占用内存的大小;

CMS垃圾回收器

Concurrent Mark Sweep 并发标记清除,作用于老年区

支持垃圾回收线程与用户线程并发(同时)执行

初始标记:独占式的暂停用户线程

并发标记:垃圾回收线程与用户线程并发(同时)执行

重新标记:独占式的暂停用户线程

并发清除:垃圾回收线程与用户线程并发(同时)执行 进行垃圾对象的清除

优点:可以做到并发收集

弊端:使用标记清除算法,会产生内存碎片,并发执行影响到用户线程,无法处理浮动垃圾

三色标记

由于CMS有并发执行过程,所以在标记垃圾对象时,有不确定性,现有的引用链可能会发生改变,不稳定

所以在标记时,将对象分为3种颜色(3种状态)

黑色:该对象已经被标记过了,且该对象下的属性也全部被标记过了(例如GCRoots对象)

灰色:在黑色对象中关联的对象,其中还有未扫描完的,之后还需要在次进行扫描

白色:与黑色、灰色对象无关联的,垃圾收集算法不可达的对象,成为垃圾,被回收

标记过程:

1.先确立GCRoots,将其标记为黑色

2.与GCRoots关联的对象标记为灰色

3.此时不再遍历黑色,而再次遍历灰色,灰色变为黑色,若灰色下面有关联的对象,则关联的对象变为灰色。

4.最终保留黑色,灰色,回收白色对象

标记过程中,可能会出现漏标,错标现象;

G1回收器() 垃圾优先

将堆内存各个区有分成较小的多个区域,对这些个区域进行检测,对某个区域中垃圾数量大的区域优先回收。

也是并发收集的。

查看JVM垃圾回收器并设置垃圾回收器

注:这些指令是为每个方法设置的,点击编程工具的Run选项的Edit Configurations,在其中的VM options中输入命令,应用后,我们再次运行此方法即可。

打印默认垃圾回收器

-XX:+PrintCommandLineFlags -version

JDK 8 默认的垃圾回收器

年轻代使用 Parallel Scavenge GC

老年代使用 Parallel Old GC

打印垃圾回收详细信息

-XX:+PrintGCDetails -version

设置默认垃圾回收器

Serial 回收器

-XX:+UseSerialGC 年轻代使用 Serial GC, 老年代使用 Serial Old GC

ParNew 回收器

-XX:+UseParNewGC 年轻代使用 ParNew GC,不影响老年代。

CMS 回收器

-XX:+UseConcMarkSweepGC 老年代使用 CMS GC。

# G1 回收器

-XX:+UseG1GC 手动指定使用 G1 收集器执行内存回收任务。

-XX:G1HeapRegionSize 设置每个 Region 的大小。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是几个 JVM 垃圾回收相关的面试题及其答案: 1. JVM 垃圾回收都有哪些? JVM 垃圾回收主要分为以下几种:串行垃圾回收、并行垃圾回收、CMS 垃圾回收、G1 垃圾回收等。 2. 串行垃圾回收和并行垃圾回收的区别是什么? 串行垃圾回收和并行垃圾回收的主要区别在于垃圾回收的方式。串行垃圾回收是单线程执行的,即在垃圾回收过程中只有一个线程在执行,而并行垃圾回收是多线程执行的,即在垃圾回收过程中可以有多个线程同时执行。 3. CMS 垃圾回收的特点是什么? CMS 垃圾回收是一种以最短回收停顿时间为目标的垃圾回收。它采用分代收集算法,在回收老年代时,采用标记-清除算法,并发标记和并发清除,以减少垃圾回收的停顿时间,提高系统的响应速度。 4. G1 垃圾回收的特点是什么? G1 垃圾回收是一种面向服务端应用的垃圾回收,它采用分代收集算法,在回收堆内存时,采用标记-整理算法。它具有以下特点:高效、可预测、可配置、可并发、可暂停等。 5. 垃圾回收的主要算法有哪些? 垃圾回收主要采用以下几种算法:标记-清除算法、复制算法、标记-整理算法、分代算法等。 以上是一些常见的 JVM 垃圾回收面试题及其答案,希望能对你有所帮助。在面试过程中,需要根据具体的问题进行回答,同时也需要对垃圾回收的原理和实现有清晰的认识,才能更好地回答相关的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值