当前位置: 首页 > news >正文

JVM面试真题总结(六)

文章收录在网站: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可达性分析算法可以找出所有被程序还可能会使用的对象。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入理解Java虚拟机:Jvm总结-垃圾收集器与内存分配策略
  • 保姆级离线+windows环境+大模型前端UI安装(二)
  • ubuntu 和windows用samba服务器实现数据传输
  • 说说深拷贝和浅拷贝?
  • 共享旅游卡,客户旅游云南,真实反馈,全程无删减!
  • 油耳要怎么清洁耳朵才干净?比较推荐哪种可视耳勺
  • 开发适合el-dialog的拉伸拖拽自定义指令和适配自定义的图片查看组件
  • Java使用Apache POI向Word文档中填充数据
  • 深度学习基础--卷积网络
  • 智能语音交互:人工智能如何改变我们的沟通方式?
  • BIOS基础
  • vue3 那些可以让 Vue3 开发更加丝滑的小东西
  • 如何判断IP地址是否异常?
  • cell phone teardown 手机拆卸
  • React18快速入门
  • github指令
  • Spark学习笔记之相关记录
  • Spring Cloud Feign的两种使用姿势
  • 为视图添加丝滑的水波纹
  • 鱼骨图 - 如何绘制?
  • 再次简单明了总结flex布局,一看就懂...
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ‌移动管家手机智能控制汽车系统
  • !$boo在php中什么意思,php前戏
  • $.ajax()
  • (2)(2.10) LTM telemetry
  • (3)nginx 配置(nginx.conf)
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (七)Activiti-modeler中文支持
  • (十六)一篇文章学会Java的常用API
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (原創) 未来三学期想要修的课 (日記)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @EnableConfigurationProperties注解使用
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ C++ ] STL---仿函数与priority_queue
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • [autojs]逍遥模拟器和vscode对接
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C/C++]数据结构 循环队列
  • [C/C++入门][ifelse]20、闰年判断
  • [CakePHP] 在Controller中使用Helper
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [IE技巧] IE8中HTTP连接数目的变化