面试: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.rhkb.cn/news/313884.html

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

相关文章

rabbitmq 使用SAC队列实现顺序消息

rabbitmq 使用SAC队列实现顺序消息 前提 SAC: single active consumer, 是指如果有多个实例,只允许其中一个实例消费,其他实例为空闲 目的 实现消息顺序消费,操作: 创建4个SAC队列,消息的路由key 取队列个数模,这…

[Java EE] 多线程(五):单例模式与阻塞队列

1. 单例模式 单例模式是校招中最长考的设计模式之一,首先我们来谈一谈什么是设计模式: 设计模式就好像象棋中的棋谱一样,如果红方走了什么样的局势,黑方就有一定地固定地套路,来应对这样的局势,按照固定地套路来,可以保证在该局势下不会吃亏. 软件开发也是同样的道理,有很多…

BGP的基本配置

l 按照以下步骤配置BGP协议: 第1步:设备基本参数配置,AS内配置IGP确保内部网络连通性; l 配置IGP(OSPF协议等)路由解决peer对等体的源和目标IP之间连通性,确保peer之间TCP(179&a…

【后端】python与django的开发环境搭建指南

安装Git 双击Git 客户端安装文件,在安装页面,单击“Next” 在安装路径选择页面,保持默认,单击“Next” 在功能组件选择页面,保持默认,单击“Next” 在开始菜单文件夹设置页面,保持默认&am…

好看到爆炸的弹窗公告源码

源码介绍 好看到爆炸的弹窗公告源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面, 源码截图 源码下载 好看到爆炸的弹窗公告源码

【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章: Elasticsearch 从入门到精通(一):基本介绍Elasticsearch 从入门到精通(二):基础使用 😊 如果您觉得这篇文章有用 ✔️ 的…

SpringBoot+vue开发记录(二)

说明:本篇文章的主要内容为SpringBoot开发中后端的创建 项目创建: 1. 新建项目: 如下,这样简单创建就行了,JDK什么的就先17,当然1.8也是可以的,后面可以改。 这样就创建好了: 2. pom.xml…

光伏无人机:巡检无人机解决巡检难题

随着科技的飞速发展,无人机技术已经广泛应用于各个领域,其中光伏无人机在解决光伏电站巡检难题方面发挥了重要作用。光伏无人机以其高效、精准、安全的特点,为光伏电站的巡检工作带来了革命性的变革。 光伏电站通常位于广阔的户外场地&#x…

如何理解自然语言处理中的位置编码(Positional Encoding)

在自然语言处理和特别是在使用Transformer模型中,位置编码(Positional Encoding)是一个关键的概念。它们的作用是为模型提供序列中各个元素的位置信息。由于Transformer架构本身并不像循环神经网络(RNN)那样具有处理序列的固有能力,位置编码因此显得尤为重要。 为什么需…

7天入门Android开发之第1天——初识Android

一、Android系统 1.Linux内核层: 这是安卓系统的底层,它提供了基本的系统功能,如内存管理、进程管理、驱动程序模型等。安卓系统构建在Linux内核之上,借助于Linux的稳定性和安全性。 2.系统运行库层: 这一层包括了安卓…

一次违法网站的渗透经历

0x01 前言 在一次攻防演练中,我发现了一个有趣的渗透路径。在信息收集阶段,我注意到目标网站和用户资产网站共享相同的IP网段。这意味着它们可能在同一台服务器上托管,或者至少由同一家互联网服务提供商管理。这种情况为我们的渗透测试提供了…

Linux命令继续学习

which命令,找到各种命令程序所处在的位置 语法:which查找的命令 那么对于我们想查找其他类型文件所在的位置,我们可以用到find命令 find命令 选项为-name,表示按照文件名进行查找 find命令中通配符 find命令和前面rm命令一样&…

学习Rust第14天:HashMaps

今天我们来看看Rust中的hashmaps,在 std::collections crate中可用,是存储键值对的有效数据结构。本文介绍了创建、插入、访问、更新和迭代散列表等基本操作。通过一个计算单词出现次数的实际例子,我们展示了它们在现实世界中的实用性。Hashm…

xgp加速器免费 微软商店xgp用什么加速器

2001年11月14日深夜,比尔盖茨亲自来到时代广场,在午夜时分将第一台Xbox交给了来自新泽西的20岁年轻人爱德华格拉克曼,后者在回忆中说:“比尔盖茨就是上帝。”性能超越顶级PC的Xbox让他们趋之若鹜。2000年3月10日,微软宣…

ScriptableObject数据容器讲解

概述 是Unity提供的一个用于创建可重用的数据容器或逻辑的基类。 ScriptableObject 是继承自 UnityEngine.Object 的一个类,但与普通的 MonoBehaviour 不同,它不能附加到GameObject上作为组件。 相反,ScriptableObject 通常用于存储和管理…

意法半导体STM32F407VET6TR单片机优缺点、参数、应用和引脚封装

ST(意法半导体)的型号STM32F407VET6TR属于32位MCU微控制器,基于高性能的ArmCortex-M4 32位RISC核心,工作频率高达168MHz。单精度浮点单元(FPU)用于Cortex-M4核心,支持所有Arm单精度数据处理指令和数据类型。它还实现了一套完整的DSP指令和一个…

就业班 第三阶段(负载均衡) 2401--4.18 day2 LVS-DR模式

3、LVS/DR 模式 实验说明: 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…

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

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

Selenium IDE 常见错误笔记

错误1:Failed:Exceeded waiting time for new window to appear 2000ms 这个错误通常出现在第一次运行时,有两个原因: Firefox阻止了弹出式窗口,在浏览器设置里允许这个操作即可。 有些网站设置了反扒机制,脚本运行…

数据库并发控制思维导图+大纲笔记

思维导图 大纲笔记 多用户数据库系统 定义 允许多个用户同时使用的数据库系统特点 在同一时刻并发运行的事务数可达数百上千个多事务执行方式 事务串行执行交叉并发方式 单处理机系统同时并发方式 多处理机系统事务并发执行带来的问题 产生多个事务同时存取同一数据的情况可能…