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的基本概念 ...
随机推荐
- python实现顺序表
python实现顺序表可以有两中形式进行存储 列表 元组 其实简单来说,顺序表无非就是操作列表和元组的方法来对顺序表进行操作. 实例代码 7 class SqList: 8 def __init__( ...
- SpringSecurity实战记录(一)开胃菜:基于内存的表单登录小Demo搭建
Ps:本次搭建基于Maven管理工具的版本,Gradle版本可以通过gradle init --type pom命令在pom.xml路径下转化为Gradle版本(如下图) (1)构建工具IDEA In ...
- 2020-2021 ACM-ICPC, Asia Seoul Regional Contest
C. Dessert Café: 题意: 给你一个N个节点的树,树上有m个房子,问树上有几个节点是在两个房子之间的. 思路:我们发现只要是该节点的子树里包括了所有节点或者只有一个节点,那么这个结点肯定 ...
- E - Recursive sequence HDU - 5950 (矩阵快速幂)
题目链接:https://vjudge.net/problem/HDU-5950 思路: 构造矩阵,然后利用矩阵快速幂. 1 #include <bits/stdc++.h> 2 #inc ...
- Centos7安装maven详情以及配置
一.maven安装: 1.获取maven下载地址: 查询maven最新版本地址:https://maven.apache.org/download.cgi 当前最新版本为maven 3.6.3 ...
- 从谷歌CRE谈起,运维如何培养服务意识?
从谷歌CRE谈起,运维如何培养服务意识? 2016年10月,谷歌云平台博客(Google Cloud Platform Blog)上更新了一篇文章,谷歌宣布了一个新的专业岗位,CRE(Customer ...
- 开源组件编排引擎LiteFlow发布里程碑版本2.5.0
介绍 LiteFlow作为一款轻量级组件编排框架,自开源来,获得了挺多人的关注.社区群也扩展到了接近200人. 早期版本因为疏忽打理,有一些BUG,迭代也不及时.距离上一个稳定版本2.3.3,已经有超 ...
- 这样介绍Ribbon,从此任何问题也难不住你
Springcloud的核心组件之Ribbon 上篇文章详细介绍了springcloud的注册中心Eureka,那么这篇文章则会介绍springcloud的另外一个组件Spring Cloud Rib ...
- JavaScript深入理解-正则表达式
正则表达式 正则表达式是用于匹配字符串中字符组合的模式.在JavaScript中,正则表达式也是对象.这些模式被用于RegExp的 exec和 text方法,以及String中的 match.matc ...
- .ts 视频文件 .m3u8视频文件合并 转换为mp4
1. 先把 .m3u8.zip 格式文件解压到文件夹D:\a. 2. 将文件夹内的 .ts文件名处理好. 一般均为按顺序排列. (殊情况需要根据.m3u8文件记录处理.) 举例,根据实际情况处理. ( ...