问题:请讲下java中垃圾回收器有哪些?

分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器

回答要点:

主要从以下几点去考虑,

1、垃圾回收器的种类

2、每种垃圾回收器的着重点是什么

前边的文章中分享了“如何设计一个垃圾回收器”、“垃圾回收算法”、“垃圾回收中的并行并发”等,今天打算分享下hotspot虚拟机中的垃圾回收器。

先看下垃圾回收器的分类,分类标准有按照垃圾回收线程和用户线程的关系、工作的内存区域

垃圾回收线程和用户线程的关系

串行

serial、serial old

并行

parNew、parallel Scavenge、parallel old

并发

CMS、G1

工作的内存区域

年轻代

serial、parNew、parallel Scavenge

年老代

serial old、parallel old、CMS

年轻代、年老代

G1

有了上面的分类,对hotspot虚拟机下的垃圾回收器大致有了了解,下面重点介绍。

serial

serial使用复制算法,作用在年轻代。同时垃圾回收线程是单线程的,也就是串行回收。以减少系统的停顿时间为目的。

serial old

serial old使用标记-整理算法,作用在年老代。垃圾回收线程是单线程,是串行回收。它是serial的年老代版本。以减少系统的停顿时间为目的

parNew

parNew使用复制算法,作用在年轻代。垃圾回收线程是多线程的,是并行回收。它可以相当于serial的多线程版本。以减少系统的停顿时间为目的

parallel Scavenge

parallel Scavenge使用复制算法,作用在年轻代。垃圾回收线程是多线程的,是并行回收。以控制系统的吞吐量为目的,适合后台计算型的任务。

parallel old

parallel Old使用标记-整理算法,作用在年老代。垃圾回收线程是多线程的,是并行回收的,是parallel Scavenge的年老代版本。

CMS

CMS使用标记-清除算法,作用在年老代。垃圾回收是多线程的,且和用户线程是并发执行的。以获取最少的系统停顿时间为目的。收集的过程如下,

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除

示意图如下,

在上面的4个阶段中,初始标记和重新标记都存在stop the world的现象,前者是单线程串行,后者是多线程并行,在并发标记和并发清除阶段则属于并发执行。由于使用的是标记-清除算法,所以在垃圾回收后会存在垃圾碎片的情况;由于是在并发清除阶段用户线程还在运行中,所以会存在浮动垃圾无法回收的情况,

G1

G1作为一款主流的垃圾回收器,从整体上而言使用的是标记-整理算法,具体到每两个region使用的是复制算法,具有以下的特点,

  • 充分利用并行与并发的优势
  • 分代收集,在G1中仍然保持着分代收集的概念,但是不需要搭配其他收集器,它自己就可以管理整个堆,而且年轻代和年老代不再是物理隔离的,取而代之的是把整个堆分为很多大小相等的独立区域,称为region,年轻代就是一组region的集合。
  • 空间整合,由于从整体上看使用标记-整理算法,从每两个region上看使用复制算法,所以使用G1不会产生垃圾碎片。
  • 可预测的停顿时间,G1和CMS都是以减少停顿时间为目的,和CMS不同的是G1建立了一套可预测的停顿时间模型。

G1分为以下几个阶段

  • 初始标记
  • 并发标记
  • 最终标记
  • 筛选回收

示意图如下,

除了上面介绍的7款垃圾回收器外,现在还有一个ZGC,是比较新的垃圾回收器,这个计划后续再研究。

衡量一款垃圾回收器的好坏,主要看两个关键指标:停顿时间、吞吐量。针对这两个指标的解释,可以参见《java面试一日一题:如何设计一款垃圾回收器》。

停顿时间重点关注用户线程的停顿时长,主要影响的是和用户的交互上,反应在系统的响应速度;吞吐量则关注的是高效利用CPU时间,完成后台的计算任务。综上,如果是和用户交互的系统,请选择以减少停顿时间为目的的垃圾回收器,如果是后台的定时任务等耗时的计算任务,请选择以提升吞吐量为目的的垃圾回收器。

有不正之处,欢迎指正,谢谢

java面试一日一题:java中的垃圾回收器的更多相关文章

  1. java面试一日一题:再谈垃圾回收器中的串行、并行、并发

    问题:请讲下java中垃圾回收器的串行.并行.并发 分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系 回答要点: 主要从以下几点去考虑, 1.串行.并行.并发的概念 2.如何考虑串行. ...

  2. java面试一日一题:mysql中常用的存储引擎有哪些?

    问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...

  3. java面试一日一题:讲下mysql中的undolog

    问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...

  4. java面试一日一题:java中垃圾回收算法有哪些

    问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...

  5. java面试一日一题:讲下在什么情况下会发生类加载

    问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...

  6. java面试一日一题:java线程池

    问题:请讲下java中的线程池 分析:在面试中经常问到线程池的问题,要掌握其基本概念,使用方法,注意事项等,引申下tomcat中默认的线程数是多少 回答要点: 主要从以下几点去考虑, 1.为什么要使用 ...

  7. java面试一日一题:如何判断一个对象是否为垃圾对象

    问题:请讲下在java中如何判断一个对象是否为垃圾 分析:该问题主要考察对java中的垃圾回收,用什么方式去识别一个对象是垃圾: 回答要点: 主要从以下几点去考虑, 1.GC回收的是什么,回收发生在内 ...

  8. java面试一日一题:如何设计一款垃圾回收器

    问题:如果让你设计一个垃圾回收器,你会考虑哪些问题 分析:该问题主要考察对java中垃圾回收器的理解,要理解怎么回收:一款好的垃圾回收器有哪些衡量指标 回答要点: 主要从以下几点去考虑, 1.垃圾回收 ...

  9. java面试一日一题:java中一个对象实例的结构是什么样子的

    问题:请讲下在java程序运行时一个对象实例的数据结构是什么样子的 分析:该问题主要考察对java中对象的理解,在程序运行过程中一个对象实例是以什么样的形式存在的 回答要点: 主要从以下几点去考虑, ...

随机推荐

  1. Django 模板(Template)

    1. 模板简介 2. 模板语言 DTL 3. 模板继承 4. HTML 转义 5. CSRF 1. 模板简介 作为 Web 开发框架,Django 提供了模板,可以很便利的动态生成 HTML.模版系统 ...

  2. aws EKS EFS storageclass PV PVC Pod

    storageclass [root@localhost specs]# cat storageclass.yaml kind: StorageClass apiVersion: storage.k8 ...

  3. php浮点数(float)运算中转整形(int)问题

    今天工作中遇见了一个浮点数转整形的问题,特此记录一下,防止以后再次踩坑. 实例: $f = 0.58; var_dump(intval($f * 100.0)); 也许你认为他会输出58,但是实际上他 ...

  4. 过 DNF TP 驱动保护(一)

    过 DNF TP 驱动保护(一)   文章目录:                   01. 博文简介: 02. 环境及工具准备: 03. 分析 TP 所做的保护: 04. 干掉 NtOpenProc ...

  5. C++ Log日志系统

    闲得无聊,瞎写的一个东西. 好多地方能够优化甚至可能重写,也没写,就记下了个思路在这里. 主要熟练一下C++17的内容. version = 0.1 lc_log .h 1 #pragma once ...

  6. 【JavaScript】Leetcode每日一题-组合总和4

    [JavaScript]Leetcode每日一题-组合总和4 [题目描述] 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 targ ...

  7. PHP + JQuery 实现多图上传并预览

    简述 PHP + JQuery实现 前台:将图片进行base64编码,使用ajax实现上传 后台:将base64进行解码,存储至文件夹,将文件名称入库 效果图 功能实现 html <!DOCTY ...

  8. 【哲学角度看软件测试】要想软件“一想之美”,UI 测试少不了

    摘要:软件测试的最高层次需求是:UI测试,也就是这个软件"长得好不好看". 为了让读者更好地理解测试,我们从最基础的概念开始介绍.以一个软件的"轮回"为例,下图 ...

  9. CRM是什么意思,有哪些作用?

    我们总会听到一些人提到CRM或CRM系统,但是通常不知道它的含义,所以今天小Z就来详细介绍一下CRM. GartnerGroup1993年首次提出了这一概念:所谓的客户关系管理就是为企业提供一个全面的 ...

  10. 炸天的3D引擎OpenCASCADE的用法及案例(https://blog.csdn.net/xipengbozai/article/details/117044032?spm=1001.2014.3001.5502)

    What CASCADE?Open CASCADE(简称OCC)平台是由法国Matra Datavision公司开发的CAD/CAE/CAM软件平台,可以说是世界上最重要的几何造型基础软件平台之一.开 ...