秋招后端开发面试题 - JVM垃圾回收器


目录

  • JVM垃圾回收器
    • 前言
    • 面试题
      • 常见的垃圾回收器有哪些?
      • CMS 收集器?
      • G1 收集器
      • 有了 CMS,为什么还要引入 G1?
      • 垃圾收集器应该如何选择?


JVM垃圾回收器

前言

已经找到工作了,分享秋招时的笔记。祝大家都能顺利找到自己心仪的工作。


面试题

常见的垃圾回收器有哪些?

  • Serial 收集器:单线程工作的收集器,在垃圾收集时,必须暂停其他所有工作线程,直到收集结束
  • ParNew 收集器:Serial 收集器的多线程并行版本
  • Parallel Scavenge 收集器:与 ParNew 相似,关注点是吞吐量(CPU 中运行用户代码时间/CPU 总消耗时间的比值)
  • Serial Old 收集器:Serial 收集器的老年代版本;单线程收集器
  • Parallel Old 收集器:Parallel Scavenge 收集器的老年代版本
  • CMS 收集器:是一种以获得最短回收停顿时间为目标的收集器
  • G1 收集器:具有局部收集的设计思路和基于 Region 的内存布局

CMS 收集器?

  • CMS 收集器是以获取最短回收停顿时间为目标的收集器
  • 基于标记 - 清除算法实现,垃圾回收过程:
    • 初始标记:单线程运行,标记 GC Roots 能直达的对象
    • 并发标记:无停顿,和用户线程同时运行,从 GC Roots 的直达对象开始遍历整个对象图
    • 重新标记:多线程运行,需要暂停所有用户线程,修正并发标记期间产生对象
    • 并发清除:无停顿,和用户线程同时执行,清理掉标记阶段判断的已经死亡的对象
  • 缺点:
    • 依赖 CPU 资源
    • 无法处理浮动垃圾
    • 收集结束会有大量空间碎片

G1 收集器

  • G1 收集器:具有局部收集的设计思路和基于 Region 的内存布局
  • 垃圾回收步骤:
    • 初始标记:标记 GC Roots 能直达的对象
    • 并发标记:和用户线程同时运行,从 GC Roots 开始遍历对象图
    • 最终标记:标记在并发标记过程中产生的垃圾
    • 筛选回收:指定回收计划,选择多个 Region 构成回收集,把回收集中 Region 的存活对象复制到空的 Region 中,再清理掉旧的 Region 空间

有了 CMS,为什么还要引入 G1?

CMS 有三个明显的缺点:

  • 依赖对 CPU 资源
  • 无法处理浮动垃圾
  • 收集结束会有大量空间碎片

G1 主要解决了内存碎片多的问题

垃圾收集器应该如何选择?

  • Serial:在没有停顿时间要求的单线程处理器上运行
  • Parallel:优先考虑应用程序的性能,对停顿时间没有什么要求
  • CMS/G1:对停顿要求和用户体验有要求的场景

秋招后端开发面试题系列目录
一、Java
1.1 Java基础上
1.2 Java基础下
1.3 Java集合
1.4 JavaIO
1.5 Java多线程上
1.6Java多线程下
二、JVM
2.1 JVM底层原理
2.2 垃圾回收器
2.3 垃圾回收算法
2.4 类加载机制
2.5 运行时数据区
三、MySQL
3.1 MySQL基础
3.2 事务
3.3 索引
3.4 锁机制
3.5 MVCC
四、Redis
4.1 Redis基础
4.2 缓存原理
五、中间件
5.1 RabbitMQ
六、Spring开源框架
6.1 Spring
6.2 Spring MVC
6.3 Spring Boot
6.4 MyBatis
七、操作系统
八、计算机网络
九、设计模式
十、微服务架构
十一、Spring Cloud分布式
11.1 分布式基础
11.2 Spring Cloud
11.3 GateWay
11.4 Nacos
11.5 OpenFeign
11.6 Ribbon
十二、算法
十三、项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)

目录 一、BSRN网络总结二、源码包准备三、环境准备3.1 报错KeyError: "No object named BSRN found in arch registry!"3.2 安装basicsr源码包3.3 参考环境 四、数据集准备五、训练5.1 配置文件参数修改5.2 启动训练5.2.1 命令方式训练5.2.2 配置Configuration方式训…

python+barcode快速生成条形码(电商测试小工具)

背景 需要测试自助收银机,每次都要在线生成条码,而且生成次数还有限制 需求 满足自定义条形码,可以生成条形码图片 方案 python 3.8以上 barcode 1.0.4 python-barcode 0.15.1 代码 用于生成Code128条形码…

基于Springboot的校园志愿者管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园志愿者管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结…

LangChain框架学习总结

目录 一、简介 二、概念 三、组件具体介绍 3.1 Models 3.1.1 LLMs 3.1.2 Chat Models 3.1.3 Text Embedding Modesl 3.1.4 总结 3.2 Prompts 3.2.1 LLM Prompt Template 3.2.1.1 自定义PromptTemplate 3.2.1.2 partial PromptTemplate 3.2.1.3 序列化PromptTemplat…

网页html版面分析-- BeauifulSoup(python 文档解析提取)

介绍 BeauifulSoup 是一个可以从HTML或XML 文件中提取数据的python库;它能通过转换器实现惯用的文档导航、查找、修改文档的方式。 BeauifulSoup是一个基于re开发的解析库,可以提供一些强大的解析功能;使用BeauifulSoup 能够提高提取数据的效…

VueComponent构造函数

//创建school组件——注册给谁 在谁的结构上写const school Vue.extend({name: school,//开发者工具的显示template: <div><h2>学校名称&#xff1a;{{schoolName}}</h2><h2>学校地址&#xff1a;{{adress}}</h2> </div>,//结构data() {…

无文件落地攻击手法

目录 前言 无文件落地攻击的常用手法 无文件落地攻击的优势 常见的利用方式

SolidUtil : Modify功能记录

API功能大纲&#xff1a; namespace Bentley.DgnPlatformNET {public class Modify : SolidUtil{public Modify();public static BentleyStatus BlendEdges(ref SolidKernelEntity target, SubEntity[] edgesIn, double[] radiiIn, int nEdgesIn, bool propagateSmoothIn);pub…

液晶数显式液压万能试验机WES-300B

一、简介 主机为两立柱、两丝杠、油缸下置式&#xff0c;拉伸空间位于主机的上方&#xff0c;压缩、弯曲试验空间位于主机下横梁和工作台之间。测力仪表采用高清液晶显示屏&#xff0c;实验数据方便直观。 主要性能技术指标 最大试验力&#xff08;kN&#xff09; 300 试…

FreeRTOS资源管理

1.以前临界资源的保护方式 有使用过静态局部变量来保护临界资源&#xff0c;也有用队列&#xff0c;信号量&#xff0c;互斥量来保护临界资源。这些都是在多个任务会共同使用临界资源的情况下我们的保护方式。 问题提出&#xff1a;如果有个传感器在读取数据时有严格的时序&a…

舒尔补【Schur Complement】

文章目录 一、定义二、推导三、一些性质四、解线性方程组五、参考资料 舒尔补&#xff08;Schur complement)是线性代数中的一个重要概念&#xff0c;经常在矩阵理论、优化问题和数值计算中出现。舒尔补可以用来简化大型线性系统的求解和分析&#xff0c;特别是在稀疏矩阵和块矩…

前端基础学习html(1)

1.标题标签.h1,h2...h6 2.段落标签p 换行标签br 3.加粗strong(b) /倾斜em(i) /删除 del(s) /下划线ins(u) 4.盒子&#xff1a;div //一行一个 span//一行多个 5.img :src alt title width height border 图片src引用&#xff1a;相对路径 上级/同级/中级 绝对路径&#xff…

触动精灵纯本地离线文字识别插件

目的 触动精灵是一款可以模拟鼠标和键盘操作的自动化工具。它可以帮助用户自动完成一些重复的、繁琐的任务&#xff0c;节省大量人工操作的时间。但触动精灵的图色功能比较单一&#xff0c;无法识别屏幕上的图像&#xff0c;根据图像的变化自动执行相应的操作。本篇文章主要讲解…

GitHacker:Git源码泄漏检测工具可恢复整个Git Repo

GitHacker是一个多线程工具&#xff0c;用于检测站点是否存在git源码泄漏&#xff0c;并能够将网站源代码下载到本地。值得一提的是&#xff0c;这个工具会将整个git repo恢复到本地&#xff0c;而不是像[githack]那样&#xff0c;只是简单的恢复到最新版本。如此一来&#xff…

【Java基础】三大特性——多态

多态的前提条件&#xff1a;继承可以简单理解为&#xff1a;把子类看成父类类型&#xff08;反之是错误的&#xff09; 优缺点 弊端: 只能使用父类&#xff08;父接口&#xff09;中定义的功能好处: 函数的参数定义为父类&#xff08;父接口&#xff09;类型&#xff0c;可以…

使用idea编辑器回退git已经push的代码

直接上结果 选择想要回退的那次/多次提交历史, 右击, 选中 revert commit git自动产生一个Revert记录&#xff0c;然后我们会看到git自动将我第三次错误提交代码回退了&#xff0c;这个其实就相当于git帮我们手动回退了代码。 后续&#xff0c;只需要我们将本次改动push到远…

Vue 介绍

【1】前端发展史 前端的发展史可简述为&#xff1a; 从最初的静态页面编写&#xff0c;依赖后端模板渲染逐步演化为通过JavaScript&#xff08;特别是Ajax技术&#xff09;实现前后端分离&#xff0c;使得前端能够独立地加载数据和渲染页面随后&#xff0c;Angular、React、Vu…

《鸿蒙:开启智能新时代的璀璨之光》

在科技的浩瀚宇宙中&#xff0c;华为鸿蒙犹如一颗闪耀的明星&#xff0c;迸发出璀璨的光芒。它是智慧与创新的完美融合&#xff0c;以其卓越的性能和独特的设计&#xff0c;颠覆着我们对科技的认知。 鸿蒙系统&#xff0c;就像一幅绚丽多彩的奇幻画卷&#xff0c;在我们眼前徐徐…

VUE 监视数据原理

1、如何监测对象中的数据&#xff1f; 通过setter实现监视&#xff0c;且要在new vue时就传入监测的数据 &#xff08;1&#xff09;对象中后加的属性&#xff0c;vue默认不做响应式处理 &#xff08;2&#xff09;如需给后添加的属性做响应式&#xff0c;请使用如下API&#x…

open 函数到底做了什么

使用设备之前我们通常都需要调用 open 函数&#xff0c;这个函数一般用于设备专有数据的初始化&#xff0c;申请相关资源及进行设备的初始化等工作&#xff0c;对于简单的设备而言&#xff0c;open 函数可以不做具体的工作&#xff0c;你在应用层通过系统调用 open 打开设备…