JVM面试真题总结(六)

news2024/9/20 22:35:05

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

解释GC的标记-整理算法及其优点

GC(垃圾收集)的标记整理算法是一种用于回收垃圾对象并释放内存空间的方法。

这个算法主要包含两个阶段:标记阶段和整理阶段。

标记阶段:

  • 在这个阶段,垃圾收集器会遍历所有的对象,对于还在使用的对象进行标记。
  • 在使用的定义可以是直接在使用,也可以是被其他在使用的对象引用。

整理阶段:

  • 在标记阶段之后,垃圾收集器会进行整理,移动所有被标记为在使用的对象,使他们在内存中连续分布。
  • 然后,它就可以一次性地回收所有未被标记的对象,也就是垃圾对象,从而释放大片连续的内存空间。

标记整理算法的一个主要优点是它可以有效地处理内存碎片问题

  • 因为它会把所有在使用的对象整理到一起,释放出大片连续的内存空间。

不过,它的代价是需要移动对象,这会增加一定的开销。

在实际的应用场景中,标记-整理算法通常用于堆内存的垃圾回收

  • 特别是处理老年代(Old Generation)的垃圾回收。

解释GC的标记-清除算法及其缺点

标记-清除(Mark-Sweep)是最早的垃圾收集算法之一

其过程主要分为两个阶段:标记阶段和清除阶段。

标记阶段

  • 这一阶段的任务是遍历所有的可达对象。
  • 从一个固定的根对象(root)开始,递归地访问对象图。
  • 在访问到每一个可达对象时,都将其标记为可达。
    • 在Java中,根对象通常包括全局变量和当前执行方法的局部变量。

清除阶段

  • 在标记阶段完成后,清除阶段开始。
  • 在这个阶段,垃圾收集器会遍历堆内存,把未被标记(也就是不可达)的对象进行清除,回收其占用的内存。

标记-清除算法的优点是实现简单,且不需要移动存活对象。

但是,它有两个显著的缺点:

效率问题

  • 标记和清除两个过程的效率都不高。

空间问题

  • 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配大对象时
    • 无法找到足够的连续内存,从而提前触发另一次垃圾收集动作。

因此,现代的垃圾收集器通常不单独使用标记-清除算法,而是结合其他算法一起使用

  • 如标记-整理算法或分代收集算法,以解决其带来的效率和空间问题。

解释GC的复制算法及其适用场景

复制算法是垃圾收集中的一种常见算法,它主要被用于新生代的垃圾回收。

  • 复制算法的基本思想是将内存分为两个相等的区域(或者不等也可以,如新生代中的Eden和Survivor区)
  • 每次只使用其中一个区域。
    • 当这个区域用完时,就把还活着的对象复制到另一个区域,然后再把已使用过的区域清空。

具体来说,例如在Java的新生代中,内存被分为一个Eden区和两个Survivor区(分别记为S0和S1)。

大部分情况下,新创建的对象会被分配在Eden区。

当Eden区满时,就会触发一次Minor GC,GC会检查Eden区中的所有对象

  • 把还活着的对象复制到一个Survivor区(如S0),然后把Eden区完全清空。
  • 在下一次Minor GC时,会再次检查Eden区和S0区
    • 把还活着的对象复制到另一个Survivor区(如S1),然后清空Eden区和S0区,以此类推。

复制算法的主要优点是:

  • 它可以快速地回收垃圾对象,因为只需要清空已使用过的区域就可以了
  • 而且,由于活着的对象会被复制到另一个区域,因此这个过程也自然地完成了内存的整理,避免了内存碎片的产生。

然而,复制算法也有一些缺点:

  • 首先,它需要两个区域来进行复制,这意味着在任何时候
    • 都有一半的内存空间是闲置的,这在内存紧张的情况下可能是一种浪费
  • 其次,如果有大量对象需要复制,那么复制过程可能会消耗一定的时间和CPU资源。

不过,对于新生代这样对象存活率较低的区域,复制算法通常是一种非常高效的垃圾收集方式。

解释GC的可达性分析算法及其优势

GC可达性分析算法是垃圾收集器用来判断哪些对象:

  • 活的(即仍然可能被程序使用)和哪些对象是死的(即不再被程序使用)的一种算法。

这个算法的基本思想是通过一系列的称为GC Roots的对象作为起始点

从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain)。

  • 当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

在Java语言中,可作为GC Roots的对象包括以下几种:

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象:

    • 比如方法中创建的对象引用。
  • 方法区中类静态属性引用的对象:

    • 比如类中的静态变量。
  • 方法区中常量引用的对象:

    • 比如字符串常量池中的引用。
  • 本地方法栈中JNI(即一般说的Native方法)引用的对象。

通过这种方式,GC可达性分析算法可以找出所有被程序还可能会使用的对象。

  • 在标记阶段完成后,未被标记的对象将被视为不可达,之后在清除阶段被回收。

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

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

相关文章

鸿蒙开发应用图标信息配置

鸿蒙开发配置文件 应用管理里面的应用 手机桌面上的应用信息 学习更多前端知识我已经整理到下面了↓↓↓↓↓↓快去看看吧

Android以及IoT设备传感器软件开发总结

1 传感器选型 1.1 传感器选型 6 axis:Bosch BMI160(比较差),InvenSense MPU6050(DMP),ST LSM6Dxx Acc: Freescale MMA7450L (MicroMachined Accelerometer/MC Multi-Axis, iMX31), Kionix KXSD9…

渣土车检测数据集 2600张 渣土车 带标注 voc yolo

数据集名称: 渣土车检测数据集 数据集规模: 图像数量:2600张标注类型:渣土车检测格式兼容性:支持VOC和YOLO标注格式 数据集内容: 该数据集主要用于训练和评估计算机视觉模型,特别是在渣土车&…

如何本地部署AI智能体平台,带你手搓一个AI Agent

今天分享如何在个人电脑上搭建一个AI智能体平台,可以自定义聊天机器人,设计智能体,编排工作流,知识库,RAG管道等等,还支持本地大模型接入,并对外提供API接口。 如搭建过程有疑问,可…

存储虚拟化

引入-在安装虚拟化VRM界面出现配置数据存储 1.数据存储 还有一处出现数据存储,创建虚拟机时,发放业务虚拟机,不建议选择,autoDS_CNAxx 2.引入FC集群文件系统 传统存储上一个LUN映射给多个CNA使用--集群文件系统VIMS-锁机制--共享存储 3.集群…

工厂方法模式和抽象工厂模式

工厂方法模式 一个工厂只能创建一种产品 工厂方法模式的结构 工厂方法模式包含以下4个角色 Product(抽象产品) ConcreteProduct(具体产品) Factory(抽象工厂) ConcreteFactory(具体工厂…

一篇文章带你看懂住宅代理如何实现内容过滤

在网络安全中,内容过滤是用户隐私保护的重要组成部分,将不良内容拦截在安全网之外是内容过滤的重中之重。在当下,住宅代理作为异军突起的网络安全工具,在内容过滤上有着不错的表现。本文将深入探讨住宅代理如何实现内容过滤&#…

项目小结二()

一.个人信息的界面 这里可以进行用户信息的修改,并渲染数据上去 二.这两天,出现的问题: 1.mybatis中 字段取别名 (还没验证,是否正确) 问题描述:由于实体类中的变量名,与数据库中…

数据权限的设计与实现系列8——前端筛选器组件Everright-filter集成框架开发1

背景 前面我们对筛选器组件进行了功能探索和技术验证,接下来就开始着手集成工作,融入一二三开发平台,打通前后端,最终让数据权限控制功能落地。 整体集成工作比较复杂,我们遵循由易到难的原则,先搭建出完整…

IPv6理论基础

IPV6 地址介绍 地址标识方法 格式 : XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX,128bit,8个16位,16进制 X表示十六进制的一个字符,可以是0 - 9,A -F 字母大小写不敏感,最终设备上显示均为大写 一个地址由8个字段构成…

Leetcode3266. K 次乘运算后的最终数组 II

Every day a Leetcode 题目来源:3266. K 次乘运算后的最终数组 II 解法1:3266. K 次乘运算后的最终数组 II 用最小堆手动模拟操作,直到原数组的最大值 mx 成为这 n 个数的最小值。 设此时还剩下 k 次操作,那么: 对…

HarmonyOs DevEco Studio小技巧11--AI插件

AI智能辅助编程工具 CodeGenie 简介 DevEco AI辅助编程工具(CodeGenie)为开发者提供高效的应用/服务AI辅助编程工具,支持HarmonyOS NEXT领域的智能知识问答、ArkTS代码补全/生成和万能卡片生成能力,提高开发者编码效率。 文档中…

mysql整体架构描述

文章目录 数据库架构示意图1. 连接层2. 服务层3. 存储引擎层4. 文件系统层5. 系统层主要特性 数据库文件格式InnoDB 存储引擎文件类型及用途 MyISAM 存储引擎文件类型及用途 其他文件类型文件内容示例表结构文件示例 (.frm)InnoDB 数据文件示例(.ibd)MyI…

(十四)、为 SpringCloud 项目生成 Docker 镜像

文章目录 1、原理2、最佳实践2.1、获得 SpringCloud 微服务启动模块的 jar 文件2.2、准备文件夹和 Dockerfile 文件2.3、 Dockerfile 文件的内容2.4、通过命令行构件新镜像 3、异常情况和处理:failed to create LLB definition3.1、现象3.2、解决配置国内镜像仓库清…

【Python报错已解决】 ModuleNotFoundError: No module named ‘tensorboard‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:使用pip安装TensorBoard…

vue3.0 使用echarts与echarts-gl 实现3D饼图

效果 安装echarts npm install echarts npm install echarts-gl 3d饼图组件&#xff1a; <template><div style"width: 100%; height: 100%" ref"echart"></div> </template><script setup> import { reactive, ref, onMou…

docker部署FastDFS文件系统详细记录,每个步骤都有详细记录。含linux和windows双系统安装教程

docker部署FastDFS文件系统详细记录 参考文章docker搭建FastDFS文件系统&#xff08;最详细版&#xff09; 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&#xff0c;所以和 原文有不少差异 文章里所有步骤由作者亲自测试&…

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里&#xff0c;然后在周边加上内边距&#xff0c;边框和外边距&#xff0c;是盒子模型 默认一个块级区域会填充父类所有的行向空间&#xff0c;并且沿着块伸长容纳其内容&#xff0c;可以为块状体设置某…

18、公司信贷管理|贷款额度的测算|贷款期限及其定价的设定逻辑!

银行在综合权衡贷款的第一还款来源和第二还款来源、风险和收益的基础上&#xff0c;应明确提出贷与不贷的意见。经调查审查同意的贷款&#xff0c;应提出最终的融资方案。 合理的融资方案既要有利于提升本行的竞争力&#xff0c;又要有利于控制贷款风险。完整的融资方案一般包…

苹果的“AI茅”之路只走了一半

今年苹果发布会最大的亮点&#xff0c;也许是和华为“撞档”&#xff0c;又或者是替腾讯“发布”新手游&#xff0c;但肯定不是iPhone 16。 9月10日&#xff0c;苹果秋季新品发布会与华为见非凡品牌盛典相继举行&#xff0c;iPhone 16系列也与HUAWEI Mate XT同日发布。 不过&…