java面试一日一题:如何设计一款垃圾回收器
问题:如果让你设计一个垃圾回收器,你会考虑哪些问题
分析:该问题主要考察对java中垃圾回收器的理解,要理解怎么回收;一款好的垃圾回收器有哪些衡量指标
回答要点:
主要从以下几点去考虑,
1、垃圾回收线程和用户线程的关系;
2、垃圾回收器的衡量指标;
3、基于垃圾回收算法有哪些垃圾回收器
上篇文章分享了垃圾回收的算法,有了垃圾回收的算法就要使用,垃圾回收器就是实现了垃圾回收算法。
要设计一款垃圾回收器,要考虑以下几个问题,
垃圾回收线程和用户线程的关系
这句话要怎么理解,一个java进程中有很多线程,可以分为用户线程和JVM自带的线程,其中用户线程就是我们写的程序运行的线程,是开发人员可以控制的;JVM自带的线程是java虚拟机自己的线程,用来处理系统的逻辑,就比如,一个操作系统分为系统进程和用户进程是一样的,一个JVM就可以看作是一个操作系统。要进行垃圾回收,在JVM中就要有GC线程,这个是JVM提供的。
了解了GC线程,那么GC线程和用户线程是什么关系?这个问题就是两个线程的关系,知道多线程的同学,都了解线程并发与并行
并发
所谓并发是指在同一时刻一个CPU上只执行一个线程,多个线程要交替执行(获得CPU的执行时间)。现在处理器都是多核的,从用户层面上来看是在同一个时刻多个线程在执行。
并行
所谓并行是指在同一时刻多个CPU上执行多条线程,多个线程并行执行,互不影响,不会因为未到CPU时间而等待;
在垃圾回收线程和用户线程上我们希望垃圾回收器可以在单核CPU下,是并发执行,在多核CPU下可并发且并行,充分利用多核的优势,提升性能;
一款好的垃圾回收器有哪些衡量指标
垃圾回收肯定要占有时间的,一款好的垃圾回收器要用户线程占有CPU的时间越长越好,最终目标是所有的CPU时间都在执行用户线程的逻辑,当然这个是不可能的;另外在进行垃圾回收的时候如果是并发的情况,那么肯定就有暂停时间,因为在单核CPU下并发是同一时刻只有一个线程在执行,那么垃圾回收线程在执行的话,程序相当于在暂停,所以暂停是一个很重要的指标;
吞吐量/率
吞吐量指的是用户线程执行的时间占JVM运行时间,公式如下
吞吐量=用户线程执行时间/(用户执行时间+GC时间),一款优秀的垃圾回收器,其吞吐量肯定是高的,也就是
停顿时间(延迟)
停顿时间指的是用户线程的停顿时间,在垃圾回收的过程中,要暂停用户线程的执行,这个暂停时间对响应要求不高的程序来说是可以接受的,如果是要求延迟低的程序,那么停顿时间就必须短。停顿时间短会带来另外一个问题,垃圾回收的频率问题。
垃圾回收的频率
垃圾回收的频率是每隔多久执行一次GC。
垃圾回收器主要关注吞吐量和停顿时间即可,要求高吞吐量必然要垃圾回收的频率降低,频率降低必然导致每次垃圾回收时间长,停顿时间便是长的;低吞吐量那么垃圾回收的频率肯定大,每次执行的时间会变短,也就是停顿时间会变短;吞吐量和停顿时间是一个反相关性的关系,

在执行频率不变的前提下,要想吞吐量变大,只能压缩停顿时间,也就是说吞吐量和停顿时间是反相关性。
有不正之处,欢迎指正,感谢
参考:https://www.cnblogs.com/yuexiaoyun/articles/14003015.html

java面试一日一题:如何设计一款垃圾回收器的更多相关文章
- java面试一日一题:java中的垃圾回收器
问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...
- java面试一日一题:mysql中常用的存储引擎有哪些?
问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...
- java面试一日一题:讲下在什么情况下会发生类加载
问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...
- java面试一日一题:讲下mysql中的undolog
问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...
- java面试一日一题:java中垃圾回收算法有哪些
问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...
- java面试一日一题:如何判断一个对象是否为垃圾对象
问题:请讲下在java中如何判断一个对象是否为垃圾 分析:该问题主要考察对java中的垃圾回收,用什么方式去识别一个对象是垃圾: 回答要点: 主要从以下几点去考虑, 1.GC回收的是什么,回收发生在内 ...
- java面试一日一题:再谈垃圾回收器中的串行、并行、并发
问题:请讲下java中垃圾回收器的串行.并行.并发 分析:该问题主要考察在垃圾回收过程中垃圾回收线程和用户线程的关系 回答要点: 主要从以下几点去考虑, 1.串行.并行.并发的概念 2.如何考虑串行. ...
- java面试一日一题:java线程池
问题:请讲下java中的线程池 分析:在面试中经常问到线程池的问题,要掌握其基本概念,使用方法,注意事项等,引申下tomcat中默认的线程数是多少 回答要点: 主要从以下几点去考虑, 1.为什么要使用 ...
- java面试一日一题:rabbitMQ的工作模式
问题:请讲下rabbitMQ的工作模式 分析:该问题纯属概念题,需要掌握rabbtiMQ的基础知识,同时该题也是切入MQ的一个引子: 回答要点: 主要从以下几点去考虑, 1.rabbitMQ的基本概念 ...
随机推荐
- Prometheus时序数据库-数据的查询
Prometheus时序数据库-数据的查询 前言 在之前的博客里,笔者详细阐述了Prometheus数据的插入过程.但我们最常见的打交道的是数据的查询.Prometheus提供了强大的Promql来满 ...
- IPFS是什么?IPFS与Filecoin有什么关系?
Filecoin 基于 IPFS 的去中心化存储网络,是 IPFS 上唯一的激励层,是一个基于区块链技术发行的通证.Filecoin 翻译过来就是文件币,简称为 FIL. 在 FIlecoin 网络中 ...
- 5、Spring教程之依赖注入
概念 依赖注入(Dependency Injection,DI). 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装 ...
- 【RTOS】堆栈与任务栈
目录 前言 概念 双堆栈指针 要点 Cortex-M3寄存器介绍 寄存器图 简要介绍 知识 出入栈 入栈(压栈) 出栈 重点知识 异常的响应序列* 入栈 取向量 更新寄存器 小结知识* FreeRTO ...
- vue 快速入门 系列 —— 侦测数据的变化 - [基本实现]
其他章节请看: vue 快速入门 系列 侦测数据的变化 - [基本实现] 在 初步认识 vue 这篇文章的 hello-world 示例中,我们通过修改数据(app.seen = false),页面中 ...
- 「HTML+CSS」--自定义加载动画【006】
前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...
- 添加ASP.NET文件夹(3)
注意:这里添加的是ASP.NET文件夹,而不是普通网站下项目创建的文件夹 ASP.NET文件夹主要有7个 1.Bin文件夹包含程序所需的所有已编译程序集 2.App_Code文件夹包含页所使用的类的源 ...
- 【Django学习笔记】-环境搭建
对于初学django新手,根据以下步骤可以快速进行Django环境搭建 虚拟环境创建 使用virtualenv创建并启用虚拟机环境 ,关于virtualenv可参考https://www.yuque. ...
- OO_Unit3总结
OO_Unit3总结 一.JML情况 理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言,为严格的程序设计提供了一套行之有效的方法.通过J ...
- Java性能调优实战,覆盖80%以上调优场景
Java 性能调优对于每一个奋战在开发一线的技术人来说,随着系统访问量的增加.代码的臃肿,各种性能问题便会层出不穷. 日渐复杂的系统,错综复杂的性能调优,都对Java工程师的技术广度和技术深度提出了更 ...