java面试一日一题:再谈垃圾回收器中的串行、并行、并发
问题:请讲下java中垃圾回收器的串行、并行、并发
分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系
回答要点:
主要从以下几点去考虑,
1、串行、并行、并发的概念
2、如何考虑串行、并行、并发的这种关系
计算机执行程序实际是在CPU上执行,由于在计算机上会存在多个程序,也就是多个进程,每个进程中又存在多个线程,线程作为CPU执行的最小单位,是通过争夺CPU时间片的方式来执行的,也就是多个线程在轮番获得CPU时间片,从而获得执行机会,由于CPU执行的时间很快,所以在用户层面上来说CPU是同时在执行程序。多个线程如何交替获得CPU时间片,获得执行的机会。
在垃圾回收器的上下文语境中,可以作下方的解释
串行
垃圾回收线程和用户线程交替执行,且垃圾回收线程是单线程的,在执行垃圾回收线程时需要暂停用户线程,出现stop the world。GC线程是单线程的并非说明环境是单CPU下,在多核CPU下进行GC的时候只会使用单核CPU。

并行
并行是多条垃圾回收线程并行工作,这里肯定是在多核CPU环境下,多条垃圾回收线程同时执行,此时用户线程处于暂停。

在垃圾回收期间,所以的CPU核心均指向GC线程,用户线程暂停。
并发
并发是垃圾回收线程和用户线程同时执行,也是在多核CPU环境下,垃圾回收线程和用户线程并发执行,也就是同一个时刻CPU0上执行用户线程,CPU1上有可能执行垃圾回收线程;

在垃圾回收期间,在多核CPU下,每个CPU执行的线程可能是不一样的,达到GC线程和用户线程并发执行的目的。
由串行到并行再到并发执行,这就是垃圾回收器的进化历史,是随着CPU的发展而发展的,最初是单核CPU,慢慢的到多核,为了充分利用多核CPU的优势,所以有了并行的垃圾回收器,为了减少用户线程的停顿时间,所以有了并发的垃圾回收器。从垃圾回收线程和用户线程的关系上我们看到了垃圾回收器的演变过程。
有不当之处,欢迎指正!

java面试一日一题:再谈垃圾回收器中的串行、并行、并发的更多相关文章
- java面试一日一题:讲下mysql中的undolog
问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...
- java面试一日一题:讲下mysql中的索引
问题:请讲下mysql中的索引 分析:mysql中有很多索引,要对对这些索引有所掌握,还要弄清楚每种索引的本质? 回答要点: 主要从以下几点去考虑 1.索引的本质是什么 2.mysql的索引分类: 3 ...
- java面试一日一题:java中的垃圾回收器
问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...
- java面试一日一题:java中垃圾回收算法有哪些
问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...
- java面试一日一题:mysql中常用的存储引擎有哪些?
问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...
- java面试一日一题:讲下在什么情况下会发生类加载
问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...
- java面试一日一题:如何设计一款垃圾回收器
问题:如果让你设计一个垃圾回收器,你会考虑哪些问题 分析:该问题主要考察对java中垃圾回收器的理解,要理解怎么回收:一款好的垃圾回收器有哪些衡量指标 回答要点: 主要从以下几点去考虑, 1.垃圾回收 ...
- java面试一日一题:讲对mysql的MVCC的理解
问题:请讲下对mysql中MVCC的理解 分析:这个问题要回答的是对MVCC的理解,以及MVCC解决了什么问题这几个方面入手. 回答要点: 主要从以下几点去考虑, 1.什么是MVCC? 2.MVCC用 ...
- java面试一日一题:如何判断一个对象是否为垃圾对象
问题:请讲下在java中如何判断一个对象是否为垃圾 分析:该问题主要考察对java中的垃圾回收,用什么方式去识别一个对象是垃圾: 回答要点: 主要从以下几点去考虑, 1.GC回收的是什么,回收发生在内 ...
随机推荐
- (七)docker-compose 安装
一.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排. Docker-Compose将所管理的容器分为三层,分别 ...
- Mybatis3源码笔记(三)Configuration
1. XMLConfigBuilder 上一篇大致介绍了SqlSession的生成.在DefaultSqlSessionFactory的构造函数中就提到了Configuration这个对象.现在我们来 ...
- Day16_98_IO_一边读一边写
一边读一边写 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp ...
- 详解JavaScript中的正则表达式
实际工作中,JavaScript正则表达式还是经常用到的.所以这部分的知识是非常重要的. 一.基础语法: 第一种:字面量语法 var expression=/pattern/flags; 第二种:Re ...
- Redis 面试必备知识点
1.Redis 简介 是一个用 C 语言开发的,高性能的键值对数据库. 数据存在于内存,读写速度快. 可用来做缓存.分布式锁.消息队列. 提供多种数据类型来支持不同的业务场景. 支持事务.持久化.Lu ...
- VScode 使用提示
vscode 配置xdebug参考 vscode配置phpxdebug 未完,待续!
- C/C++ 实现多线程与线程同步
多线程中的线程同步可以使用,CreateThread,CreateMutex 互斥锁实现线程同步,通过临界区实现线程同步,Semaphore 基于信号实现线程同步,CreateEvent 事件对象的同 ...
- hdu4810
题意: 给你n个数,让你输出n个数,没一次输出的是在这n个数里面取i个数异或的和(所有情况<C n中取i>). 思路: 首先把所有的数都拆成二进制,然后把他们在某一位上 ...
- GNU C++的符号改编机制介绍(函数的名称粉碎格式解析)
转载:http://blog.csdn.net/roland_sun/article/details/43233565 众所周知,强大的C++相较于C增添了许多功能.这其中就包括类.命名空间和重载这些 ...
- Day007 数组的声明与创建
数组 数组的定义 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成. 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 数组声 ...