java八股文面试[JVM]——垃圾回收器

news2024/11/16 11:54:41
jvm结构总结

 

在这里插入图片描述

在这里插入图片描述

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

 

 

CMS(Concurrent Mark Sweep)

整堆收集器: G1

由于整个过程中耗时最长并发标记并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行。老年代收集器(新生代使用ParNew)

参数控制:

-XX:+UseConcMarkSweepGC 使用CMS收集器
-XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长
-XX:+CMSFullGCsBeforeCompaction 设置进行几次Full GC后,进行一次碎片整理
-XX:ParallelCMSThreads 设定CMS的线程数量(一般情况约等于可用CPU数量)

cms是一种预处理垃圾回收器,它不能等到old内存用尽时回收,需要在内存用尽前,完成回收操作,否则会导致并发回收失败
  

G1是目前技术发展的最前沿成果之一,HotSpot开发团队赋予它的使命是未来可以替换掉JDK1.5中发布的CMS收集器

上面提到的垃圾收集器,收集的范围都是整个新生代或者老年代,而G1不再是这样。使用G1收集器时,Java堆的内存布局与其他收集器有很大差别,它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔阂了,它们都是一部分(可以不连续)Region的集合。

在这里插入图片描述

每个Region被标记了E、S、O和H,说明每个Region在运行时都充当了一种角色,其中H是以往算法中没有的,它代表Humongous,这表示这些Region存储的是巨型对象(humongous object,H-obj),当新建对象大小超过Region大小一半时,直接在新的一个或多个连续Region中分配,并标记为H。

为了避免全堆扫描,G1使用了Remembered Set来管理相关的对象引用信息。当进行内存回收时,在GC根节点的枚举范围中加入Remembered Set即可保证不对全堆扫描也不会有遗漏了。

如果不计算维护Remembered Set的操作,G1收集器的运作大致可划分为以下几个步骤:

1、初始标记(Initial Making)

2、并发标记(Concurrent Marking)

3、最终标记(Final Marking)

4、筛选回收(Live Data Counting and Evacuation)

看上去跟CMS收集器的运作过程有几分相似,不过确实也这样。初始阶段仅仅只是标记一下GC Roots能直接关联到的对象,并且修改TAMS(Next Top Mark Start)的值,让下一阶段用户程序并发运行时,能在正确可以用的Region中创建新对象,这个阶段需要停顿线程,但耗时很短。并发标记阶段是从GC Roots开始对堆中对象进行可达性分析,找出存活对象,这一阶段耗时较长但能与用户线程并发运行。而最终标记阶段需要把Remembered Set Logs的数据合并到Remembered Set中,这阶段需要停顿线程,但可并行执行。最后筛选回收阶段首先对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划,这一过程同样是需要停顿线程的,但Sun公司透露这个阶段其实也可以做到并发,但考虑到停顿线程将大幅度提高收集效率,所以选择停顿。下图为G1收集器运行示意图:

G1收集器是基于标记整理算法实现的,不会产生空间碎片,可以精确地控制停顿,将堆划分为多个大小固定的独立区域,并跟踪这些区域的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域(Garbage First)。

 垃圾回收器比较

在这里插入图片描述

垃圾回收器选择策略 

客户端程序 : Serial + Serial Old;

吞吐率优先的服务端程序(比如:计算密集型) : Parallel Scavenge + Parallel Old;

响应时间优先的服务端程序 :ParNew + CMS。
 

知识来源:

【2023年面试】jvm有哪些垃圾回收器,实际中如何选择_哔哩哔哩_bilibili

JVM学习笔记(一)_卷心菜不卷Iris的博客-CSDN博客

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

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

相关文章

【Unity】拖拽放置模型时 为什么出现有时候有紧贴地面和有时候随机再空中的情况

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

骨传导耳机对大脑有影响吗?骨传导耳机有什么副作用

先上结论,骨传导耳机对大脑没有影响。骨传导耳机使用的是骨传导技术,声音是通过头骨骨头和颌骨给内耳传递的,而不是通过传统的空气传播。 简单来说,骨传导技术使用人类骨骼结构和声学原理来传递声音,这种现象我们也很常…

深入剖析Kubernetes之Kubernetes的本质

文章目录 Kubernetes的本质 Kubernetes的本质 Kubernetes 项目在 Borg 体系的指导下,体现出了一种独有的“先进性”与“完备性”,而这些特质才是一个基础设施领域开源项目赖以生存的核心价值。 Kubernetes 项目的架构,跟它的原型项目 Borg 非…

Python中的API构建指南:在Flask中进行API开发

原文:Python中的API构建指南:在Flask中进行API开发 - 知乎 如何实现从一个软件与另一个软件的通信交互?就像我们的APP,如何实现微信支付、苹果支付? 其实,我们只需要一个API。 API(应用程序编…

【二叉树入门指南】链式结构的实现

【二叉树入门指南】链式结构的实现 一、前置说明二、二叉树的遍历2.1前序遍历2.2中序遍历2.3 后序遍历 三、以前序遍历为例,递归图解四、层序遍历五、节点个数以及高度等5.1 二叉树节点个数5.2二叉树叶子节点个数5.3 二叉树第k层节点个数5.4 二叉树查找值为x的节点5…

黑客资料(基本概念,漏登平台,kali安装)

黑客资料 1.基本概念 1.1安全三要素 1.2 渗透测试 在拥有授权的前提下,模拟黑客的攻击手段进行测试,也被称为道德黑客 1.3 渗透测试的意义 1.4 渗透测试的流程 1.5 确定目标 这个确定目标,主要对范围进行测试,对那些设备&#…

【线程池】线程池拒绝策略还有这个大坑(二)

目录 踩坑代码 后果展示 原因 小结 概要 上文我们聊了聊阻塞队列,有需要的小伙伴可以去瞅瞅【线程池】换个姿势来看线程池中不一样的阻塞队列(一)_走了一些弯路的博客-CSDN博客 这波我们一起来研究下线程池的拒绝策略。 你肯定要说了&a…

odejs+vue+elementui个人图片电子相册网站_84ds3

系统阐述的是使用智能化电子相册系统的设计与实现,对于nodejs、B/S结构、MySQL进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了vue.js框架和MySQL数据库技术搭建系统的整体架构。利…

gitcode中删除已有的项目

镜像地址: https://www.jianshu.com/p/504c1418adb7?v1693021320653 扩展阅读 如何在GitLab中删除一个项目 https://www.codenong.com/cs106866762/ 简介: 如何在GitLab中删除一个项目 最近GIT上建了太多项目。想清一下,就在网上查了查…

27台光刻机,ASML做出了选择,无法割舍中国市场

日前ASML公布的业绩显示二季度它对中国市场的光刻机出货量环比猛增两倍多至27台,显示出ASML对中国市场的重视,为何在荷兰决定自9月1日起限制对中国供应先进芯片设备之时,ASML却突然加大了对中国的光刻机供货力度呢? ASML虽然垄断着…

Ruoyi微服务启动流程

1、执行sql 执行sql ry-quarty.sql ry_2023706.sql 到ry-cloud 数据库 2、下载nacos 修改配置文件 修改连接地址 启动nacos 看到下面的配置文件即为成功 修改配置文件里面的数据库连接信息 3、修改nacos 为单机启动 4、启动项目即可 nacos自取 链接: https://pan.baidu…

如何提高企业的维修效率?智能维修设备管理系统有什么作用?

随着工业4.0的不断发展,智能维修设备管理系统已经成为了企业提高维修效率、降低维修成本、优化资源利用的重要工具。本文将介绍智能维修设备管理系统的优势以及推荐使用“的修”平台设备管理系统的理由。 一、智能维修设备管理系统的优势   智能维修设备管理系统通…

PHP8函数的引用和取消-PHP8知识详解

今天分享的是php8函数的引用和取消,不过在PHP官方的参考手册中,已经删除了此类教程。 1、函数的引用 在PHP8中不管是自定义函数还是内置函数,都可以直接简单的通过函数名调佣。函数的引用大致有下面3种: 1.1、如果是PHP的内置函…

暑期习题练习 C语言

编程能力小提升! 前言一、转义字符二、重命名与宏定义三、三目运算符四、计算日期到天数转换五、计算字符串长度六、宏定义应用七、const常量八、C语言基础九、const常量(二)十、符号运算十一、记负均正十二、SWITCH,CASE十三、错…

阿桂天山的技术小结:Flask+UEditor实现图片文件上传富文本编辑

话不多说,有图有源码 先看效果: 1.前端html页面index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><script src"{{ url_for(static,filenameueditor/ueditor.config.js) }}"></script…

pytest执行顺序,不要迷恋pytest-order

所以说pytest的执行顺序是默认编写的顺序来执行的 笔者在编写场景化测试用例时 test_违规告警_未报备空进重出.py 使用了order 序号1-12来进行排序 test_违规告警_未报备重进空出.py 使用了order 序号1-12来进行排序&#xff0c;执行时导致先会执行两个文件夹中order1的用例造成…

C语言练习3(巩固提升)

C语言练习3 选择题 选择题 前言 奋斗是曲折的&#xff0c;“为有牺牲多壮志&#xff0c;敢教日月换新天”&#xff0c;要奋斗就会有牺牲&#xff0c;我们要始终发扬大无畏精神和无私奉献精神。奋斗者是精神最为富足的人&#xff0c;也是最懂得幸福、最享受幸福的人。正如马克思…

2023科隆游戏展开幕~黑神话等多款国产游戏亮相

这是【游戏开发那些事】第62篇原创 科隆游戏展&#xff0c;全名科隆国际游戏娱乐展览会&#xff08;Gamescom&#xff09;&#xff0c;是世界上最大的电子游戏展览之一。由德国联邦协会互动娱乐软件&#xff08;BIU&#xff09;主办&#xff0c;每年在德国科隆举行&#xff0c;…

探讨uniapp的路由与页面栈及参数传递问题

1首先引入页面栈 框架以栈的形式管理当前所有页面&#xff0c; 当发生路由切换的时候&#xff0c;页面栈的表现如下&#xff1a; 页面的路由操作无非&#xff1a;初始化、打开新页面、页面重定向、页面返回、tab切换、重加载。 2页面路由 uni-app 有两种页面路由跳转方式&am…

Activity之间的数据传递方法汇总

在Activity间传递的数据一般比较简单&#xff0c;但是有时候实际开发中也会传一些比较复杂的数据&#xff0c;本节一起来学习更多Activity间数据的传递方法。 1、通过 Intent 传递 我们在进行 Activity 跳转时&#xff0c;是要有 Intent&#xff0c;此时 Intent 是可以携带数…