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

分析:该问题主要考察对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. Dynamics CRM 在表单上显示更改历史记录(审核历史记录)

    前言 虽然Dynamics CRM自带的审计很好,但是对于缺乏使用CRM经验的用户来说,自带的UCI界面实在是太隐藏了: 于是乎就出现了需求:想通过在表单上直接看到看审计历史记录: 在网上搜索了很多中 ...

  2. Swagger接口如何生成Html离线文档

    A very simple tool that converts Swagger Api Document to Html File. 小记Swagger接口生成Html离线文档 由来 很多人用swa ...

  3. BUAA_OO_2020_第二单元总结

    BUAA_OO_2020_第二单元总结 第一次 设计策略 本次作业采用生产者.消费者模式设计,大致框架如图所示: 生产者:输入线程 消费者:电梯线程 托盘:Dispatcher调度器 线程安全方面,调 ...

  4. (数据科学学习手札117)Python+Dash快速web应用开发——交互表格篇(下)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  5. Cobalt Strike使用教程一

    Cobalt Strike使用教程一     0x00 简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为 ...

  6. 铁人三项(第五赛区)_2018_seven

    铁人三项(第五赛区)_2018_seven 先来看看保护 保护全开,IDA分析 首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw 读入的都shellcode长度小于等于7,且这7个字符不 ...

  7. Day13_67_interrupt() 方法

    interrupt() 方法 中断线程 * interrupt()方法的简单理解 - interrupt() 方法只是改变线程的阻塞状态而已,让一个正在阻塞状态的线程,恢复执行.但是它不会中断一个正在 ...

  8. 这种ERP系统核查工作实际是在做无用功

    前段时间跟朋友聊起他们公司持续了好几年的ERP核查工作,此时他正在一家分公司做核查.ERP核查工作我是知道的,一个季度一次,每个模块出一个人去子公司巡回巡查,主要核查ERP系统的使用情况. 核查工作主 ...

  9. 【原创】【基础】一文搞懂严蔚敏数据结构SqList &L和SqList L、ElemType &e和ElemType e

    旁白 最近小渔夫在看严蔚敏.李冬梅<数据结构 c语言版>(第2版),学到第二章顺序表的实现时,看到函数参数一会是SqList &L.一会又是SqList L.一会ElemType ...

  10. ES系列(三):网络通信模块解析

    ES是一个分布式搜索引擎,其除了用户提供必要的通信服务外,集群间也必须保持紧密的通信联系,才能在必要的时候给出正确的结果.其则必然涉及到各种繁多且要求高的通信场景,那么如何实现高性能的通信,则是其必须 ...