问题:如果让你设计一个垃圾回收器,你会考虑哪些问题

分析:该问题主要考察对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面试一日一题:如何设计一款垃圾回收器的更多相关文章

  1. java面试一日一题:java中的垃圾回收器

    问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. java面试一日一题:rabbitMQ的工作模式

    问题:请讲下rabbitMQ的工作模式 分析:该问题纯属概念题,需要掌握rabbtiMQ的基础知识,同时该题也是切入MQ的一个引子: 回答要点: 主要从以下几点去考虑, 1.rabbitMQ的基本概念 ...

随机推荐

  1. 白话解读 WebRTC 音频 NetEQ 及优化实践

    NetEQ 是 WebRTC 音视频核心技术之一,对于提高 VoIP 质量有明显的效果,本文将从更为宏观的视角,用通俗白话介绍 WebRTC 中音频 NetEQ 的相关概念背景和框架原理,以及相关的优 ...

  2. windows创建签名文件pfx

    https://stackoverflow.com/questions/84847/how-do-i-create-a-self-signed-certificate-for-code-signing ...

  3. 下载微软pdb符号文件

    使用symchk.exe  逐层下载c:\windows\system32下的pdb文件 symchk /r c:\windows\system32 /s SRV*D:\mypdb\*http://m ...

  4. 了解PSexec

    PSExec允许用户连接到远程计算机并通过命名管道执行命令.命名管道是通过一个随机命名的二进制文件建立的,该文件被写入远程计算机上的ADMIN $共享,并被SVCManager用来创建新服务. 您可以 ...

  5. DFS 深搜专题 入门典例 -- 凌宸1642

    DFS 深搜专题 入门典例 -- 凌宸1642 深度优先搜索 是一种 枚举所有完整路径以遍历所有情况的搜索方法 ,使用 递归 可以很好的实现 深度优先搜索. 1 最大价值 题目描述 ​ 有 n 件物品 ...

  6. D. 【例题4】字符串环

    解析 字符串的操作,可以用函数解决这个问题 s 2. f i n d ( s 1. s u b s t r ( i , j ) ) s2.find~(s1.substr~(i,~j)) s2.find ...

  7. Java字节流和字符流,是时候总结一下IO流了

    目录 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 字符输入流 字符输出流 为什么字符流需要 ...

  8. Dynamics CRM证书更换

    Dynamics CRM产品一般有两种认证方式.第一种是基于声明的内部访问也就是无证书单纯用账号密码验证.第二种就是联合身份认证,需要安装网站证书. 对于联合身份认证的情况因为需要安装证书,而且证书是 ...

  9. OO第一单元作业——魔幻求导

    简介 本单元作业分为三次 第一次作业:需要完成的任务为简单多项式导函数的求解. 第二次作业:需要完成的任务为包含简单幂函数和简单正余弦函数的导函数的求解. 第三次作业:需要完成的任务为包含简单幂函数和 ...

  10. 重磅:谷歌强势回归! google大会报名

    google退出中国已经很久了,有关google回归的消息也流传了很久,今天,我们迎来了回归的开幕式. 1.中国区开发者网站 不需要梯子,赶紧取感受下吧: https://developers.goo ...