面试:JVM垃圾回收

一、三种垃圾回收算法

1、标记清除(已废弃)

  • 找到根对象(局部变量正在引用的对象、静态变量正在引用的对象);
  • 沿着根对象的引用链,查看当前的对象是否被根对象所引用,若被引用,则加上标记;
  • 加标记的对象保留下来,其余的释放掉;

缺点:

  1. 会造成内存碎片问题;

因为未被引用的对象一般不连续,所以当需要一段连续的内存时,每一段内存都不够用;

2、标记整理(老年代)

  • 前三步和标记清除法一致;
  • 在清除后会将引用对象整理为一段连续的内存,从而避免了内存碎片的问题;

缺点:

  1. 效率较低:

因为有整理的操作,会有引用地址的重新计算内存复制

3、标记复制(新生代)

将存活的对象复制到新的内存空间中,将原来的内存直接删掉。

缺点:

  1. 占用了一份额外的内存;
  2. 当存活对象较多时,会复制很多次;

二、GC和分代回收算法

GC的目的在于实现无用对象内存自动释放,减少内存碎片、加快分配速度

  1. 回收区域是堆内存,不包括虚拟机栈,在方法调用结束会自动释放方法占用内存。
  2. 判断无用对象,使用可达性分析算法三色标记法标记存活对象,回收未标记对象
  3. GC具体的实现称为垃圾回收器
  4. GC大都采用了分代回收思想,理论依据是大部分对象朝生夕灭,用完立刻就可以回收,另有少部分对象会长时间存活,每次很难回收,根据这两类对象的特性将回收区域分为新生代和老年代,不同区域应用不同的回收策略。
  5. 根据GC的规模可以分成 Minor GCMixed GC,Full GC。

1、分代回收

  1. 伊甸园eden,最初对象都分配到这里,与幸存区合称新生代
  2. 幸存区survivor,当伊甸园内存不足,回收后的幸存对象到这里,分成 from和to,采用标记复制算法
  3. 老年代 old,当幸存区对象熬过几次回收(最多15次),晋升到老年代(幸存区内存不足或大对象会导致提前晋升)

2、GC规模

  • Minor GC发生在新生代的垃圾回收,暂停时间短
  • Mixed GC新生代+老年代部分区域的垃圾回收,G1收集器特有
  • Full GC新生代+老年代完整垃圾回收,暂停时间长,应尽力避免

三、三色标记与并发漏标问题

  • 黑色–已标记
  • 灰色–标记中
  • 白色–还未标记

1、lncremental Update

  • 只要赋值发生,被赋值的对象就会被记录(用户线程结束后,重新检查引用)

2、Snapshot At The Beginning,SATB

  • 新加对象会被记录(用户线程结束后,重新检查引用)
  • 被删除引用关系的对象也被记录

四、垃圾回收器

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

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

相关文章

区块链 | OpenSea 相关论文:Toward Achieving Anonymous NFT Trading(一)

​ 🥑原文: Toward Achieving Anonymous NFT Trading 🥑写在前面: 本文对实体的介绍基于论文提出的方案,而非基于 OpenSea 实际采用的方案。 其实右图中的 Alice 也是用了代理的,不过作者没有画出来。 正文…

机器视觉检测为什么是工业生产的刚需?

机器视觉检测在工业生产中被视为刚需,主要是因为它具备以下几个关键优势: 提高精度与效率:机器视觉系统可以进行高速、高精度的检测。这对于保证产品质量、减少废品非常关键。例如,在生产线上,机器视觉可以迅速识别产品…

UEFI安全启动模式下安装Ubuntu的NVIDIA显卡驱动

UEFI安全启动模式下安装ubuntu的nvidia显卡驱动 实践设备:华硕FX-PRO(NVIDIA GeForce GTX 960M) 一、NVIDIA官网下载驱动 1.1在浏览器地址栏输入https://www.nvidia.cn/drivers/lookup/进入网站,接着手动驱动搜索,并…

The Clock and the Pizza [NeurIPS 2023 oral]

本篇文章发表于NeurIPS 2023 (oral),作者来自于MIT。 文章链接:https://arxiv.org/abs/2306.17844 一、概述 目前,多模态大语言模型的出现为人工智能带来新一轮发展,相关理论也逐渐从纸面走向现实,影响着人们日常生活…

探讨mfc100u.dll丢失的解决方法,修复mfc100u.dll有效方法解析

mfc100u.dll丢失是一个比较常见的情况,由于你电脑的各种操作,是有可能引起dll文件的缺失的,而mfc100u.dll就是其中的一个重要的dll文件,它的确实严重的话是会导致程序打不开,系统错误的。今天我们就来给大家科普一下mf…

太速科技-多路PCIe的阵列计算全国产化服务器

多路PCIe的阵列计算全国产化服务器 多路PCIe的阵列计算全国产化服务器以国产化处理器(海光、飞腾ARM、算能RSIC V)为主板,扩展6-8路PCIe3.0X4计算卡; 计算卡为全国产化的AI处理卡(瑞星微ARM,算能AI&#x…

【stm32】swjtu西南交大嵌入式实验三 外部中断实验:按键中断

实验内容: 1、编写程序,设置主程序:跑马灯以 0.2s 的速度旋转;将 KB1 设置为外部中断,下 降沿触发,按下 KB1 则全彩灯的 R 灯闪烁 5 次。编译、下载程序到开发板,观察实 验现象;按下…

阶跃星辰:探索智能科技的星辰大海

引言 在当今快速发展的科技时代,人工智能已经成为推动社会进步的重要力量。阶跃星辰,正是在这一背景下诞生的。 阶跃星辰是一家专注于通用人工智能探索的公司,成立于2023年4月。该公司的创始团队由一群对人工智能充满热情和渴望的人组成&am…

LM1875L-TB5-T 音频功率放大器 PDF中文资料_参数_引脚图

LM1875L-TB5-T 规格信息: 商品类型音频功率放大器 音频功率放大器的类型- 输出类型1-Channel (Mono) 作业电压16V ~ 60V 输出功率25W x 1 4Ω 额外特性过流保护,热保护 UTC LM1875是一款单片功率放大器,可为消费类音频应 用提供极低失真和高品质的…

物联网鸿蒙实训解决方案

一、建设背景 在数字化浪潮汹涌的时代,华为鸿蒙系统以其前瞻的技术视野和创新的开发理念,成为了引领行业发展的风向标。 据华为开发者大会2023(HDC. Together)公布的数据,鸿蒙生态系统展现出了强劲的发展动力&#x…

MongoDB的UTCDateTime如何使用

使用MongoDB的UTCDateTime类来存储当前的UTC日期和时间。UTCDateTime对象在MongoDB中表示一个日期,但是它不是PHP的DateTime类。如果你想把UTCDateTime对象格式化为可读的字符串需要先把UTCDateTime对象转换成PHP的DateTime类 方法 (new MongoDB\BSON\UTCDateTime…

【论文浅尝】Phi-3-mini:A Highly Capable Language Model Locally on Your Phone

Phi-3-mini phi-3-mini,一个3.8亿个参数的语言模型,训练了3.3万亿个token,其总体性能,通过学术基准和内部测试进行衡量,可以与Mixtral 8x7B和GPT-3.5等模型相媲美(在MMLU上达到69%,在MT-bench上达到8.38)&…

深圳证券交易所Binary行情数据接口规范

对接深圳证券交易所Binary行情数据接口其实并不难,你需要具备以下知识。 1、需要了解Binary报文设计结构,消息头消息体消息尾。 消息体: 如果是纯map结构的比较简单,字段平铺开来即可。如{"id":"1","…

WEB服务的配置与使用 Apache HTTPD

服务端:服务器将发送由状态代码和可选的响应正文组成的 响应 。状态代码指示请求是否成功,如果不成功,则指示存在哪种错误情况。这告诉客户端应该如何处理响应。较为流星的web服务器程序有: Apache HTTP Server 、 Nginx 客户端&a…

bugfix: com.alibaba.druid.sql.parser.EOFParserException: EOF

前言 在日常的开发工作中,我们经常会遇到各种各样的问题,其中涉及数据库操作的接口联调尤其容易出现意想不到的状况。今天我就遇到了一个关于Druid SQL解析异常的问题,具体表现为com.alibaba.druid.sql.parser.EOFParserException: EOF。通过…

基于SpringBoot开发的同城租房系统租房软件APP小程序源码

项目背景 一、市场前景 随着城市化进程的加快和人口流动性的增强,租房市场正逐渐成为一个不可忽视的巨大市场。传统的租房方式往往存在着信息不对称、效率低下等问题,而同城租房软件的出现,则有效地解决了这些问题,为租房市场注…

k8s日常动手实践 ~~ pod访问 pod请求 k8s api ~ 含新版带curl的busybox镜像

前言: 可以使用 Kubernetes API 获取集群信息。使用 Service Account(SA)进行身份验证,可以以安全的方式访问 Kubernetes API,而无需在 Pod 中使用明文凭据。 以下是一个使用 Service Account 访问 Kubernetes API 获…

每日OJ题_DFS回溯剪枝①_力扣46. 全排列(回溯算法简介)

目录 回溯算法简介 力扣46. 全排列 解析代码 回溯算法简介 回溯算法是一种经典的递归算法,通常⽤于解决组合问题、排列问题和搜索问题等。 回溯算法的基本思想:从一个初始状态开始,按照⼀定的规则向前搜索,当搜索到某个状态无…

【韩国】UE5的MetaHuman确实可以导入Blender进行编辑。

UE5的MetaHuman确实可以导入Blender进行编辑。根据网络上的信息,你可以将MetaHuman模型导出为FBX文件,然后在Blender中进行修改。修改完成后,你可以将其重新导入到Unreal Engine 5中4。请注意,当你在Blender中编辑模型时&#xff…

虚拟线程的定义及使用

0.前言 长期以来,虚拟线程是 Java 中最重要的创新之一。 它们是在 Project Loom 中开发的,自 Java 19 作为预览功能以来一直包含在 JDK 中,自 Java 21 作为最终版本 (JEP 444) 以来,它们已包含在 JDK 中。 1.虚拟线程的作用 任…