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网络编程--TCP客户端的开发
#导入socket模块 2 import socket 3 #参数说明 4 """ 5 socket类的介绍 6 创建客户端socket对象 7 socket.socke ...
- codefoces B - Phoenix and Beauty
原题链接:https://codeforc.es/problemset/problem/1348/B 题意:告诉我们一个数组及其长度和k,判断是否可以构造一个新数组使得每K段长度和都相等. 思路:首先 ...
- Android应用程序的进程创建过程
目录 前言 步骤 step1 Ams发起请求startProcessLocked step2 Zygote收到请求 step3 handleChildProc -- 进入子进程的世界 step4 Ru ...
- teprunner测试平台用例前置模块开发
本文开发内容 现在正式进入测试相关功能开发.teprunner测试平台底层是pytest,中间层是tep,还没了解的朋友可以先看看tep的文章,整个平台的设计思路和后面用例的执行都会基于这个工具.te ...
- Java例题_26 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母。
1 /*26 [程序 26 求星期] 2 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母. 3 程序分析:用情况语句比较好,如果第一个字母一样,则判断用情 ...
- java例题_10小球 自由落体
1 /*10 [程序 10 自由落体] 2 题目:一球从 100 米高度自由落下,每次落地后反跳回原高度的一半: 3 求它在 第 10 次落地时,共经过多少米? 4 第 10 次反弹多高? 5 */ ...
- 学习C#第二天
变量 变量是什么? 在数学中,我们对变量的概念有一定的了解和认识,如y=x^2,其中,x,y都是变量. 定义 一个变量就是存储区(内存)中的一个存储单元 变量的声明及初始化 使用变量的步骤 声明一个变 ...
- Activiti工作流学习笔记(四)——工作流引擎中责任链模式的建立与应用原理
原创/朱季谦 本文需要一定责任链模式的基础,主要分成三部分讲解: 一.简单理解责任链模式概念 二.Activiti工作流里责任链模式的建立 三.Activiti工作流里责任链模式的应用 一.简单理解责 ...
- 手写无缝轮播banner
<div class="banner"> <ul class="clearfloat bannerul xin" id="xin&q ...
- 使用pr进行视频的剪辑
本人作为一个经常浪迹在各个小视频的网站的视频界"gai溜子",很是喜欢一些人上传的综艺或者电影的搞笑搞笑小桥段,有的剪辑下来的片段甚至会比我们自己去看还要有意思的多.我认为视频剪辑 ...