『面试必问JVM系列』JVM的四种垃圾回收算法详解

JVM 有哪些垃圾回收算法? JVM垃圾回收算法 标记-清除算法 该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。也可以反过来先标记所有不需要被回收的对象,标记完成以后回收没有被标记的对象。 优缺点: 执行效率不稳定,适用于对象存过较多的区域,适用于老年代会产生内存碎片 何为清除? 标记清除并不是真的置空,而是把需要清除的对象地址保存在空闲的地址列表里。下次有新对象需要加载时,判断垃圾的位置空间是否够,如果够,就存放。 复制算法 将可用内存分为大小... 阅读详情

垃圾回收算法

相关视频教程(来自动力节点):https://www.bilibili.com/video/BV1e64y197rh

相关资料下载:http://www.bjpowernode.com/?csdn

1. 标记 —— 清除算法

直接标记清除就可。

两个不足:

  1.     效率不高
  2.     空间会产生大量碎片

2. 复制算法

    把空间分成两块,每次只对其中一块进行 GC。当这块内存使用完时,就将还存活的对象复制到另一块上面。

解决前一种方法的不足,但是会造成空间利用率低下。因为大多数新生代对象都不会熬过第一次 GC。所以没必要 1 : 1 划分空间。可以分一块较大的 Eden 空间和两块较小的 Survivor 空间,每次使用 Eden 空间和其中一块 Survivor。当回收时,将 Eden 和 Survivor 中还存活的对象一次性复制到另一块 Survivor 上,最后清理 Eden 和 Survivor 空间。大小比例一般是 8 : 1 : 1,每次浪费 10% 的 Survivor 空间。但是这里有一个问题就是如果存活的大于 10% 怎么办?这里采用一种分配担保策略:多出来的对象直接进入老年代。

3. 标记-整理算法

    不同于针对新生代的复制算法,针对老年代的特点,创建该算法。主要是把存活对象移到内存的一端。

4. 分代回收

    根据存活对象划分几块内存区,一般是分为新生代和老年代。然后根据各个年代的特点制定相应的回收算法。

新生代:每次垃圾回收都有大量对象死去,只有少量存活,选用复制算法比较合理。

老年代:老年代中对象存活率较高、没有额外的空间分配对它进行担保。所以必须使用 标记 —— 清除 或者 标记 —— 整理 算法回收。

JVM与垃圾回收面试总结 1. JVM垃圾回收机制与实现 堆:所有的对象实例与数组,GC堆,分为新生代与老年代 栈:栈帧包含局部变量表(基本数据类型 8种、对象引用类型)、操作数栈、动态链接、方法出口 方法区:类信息、常量、静态变量、即时编译器编译后的代码等数据,也成为永久代 一般说栈指的是 虚拟机栈,或者说是虚拟机栈中的局部变量表 TLAB:本地线程分配缓冲,线程分配内存,现用TLAB分配,用完重新分配新的TL... 阅读详情

相关推荐

Java千百问_07JVM架构(009)_什么是新生代的复制算法

所谓复制算法(Copying),即将内存平均分成A区、B区两块,进行复制+清除垃圾的操作,算法图解如下:算法过程: 新生对象被分配到A块中未使用的内存当中。当A块的内存用完了, 把A块的存活对象复制到B块。 清理A块所有对象。

幽灵雾的专栏 4488

垃圾回收算法(新生代——复制,老年代——标记清除)

2.3.1 标记 —— 清除算法 直接标记清除就可。 两个不足: 效率不高 空间会产生大量碎片 2.3.2 复制算法 把空间分成两块,每次只对其中一块进行 GC。当这块内存使用完时,就将还存活的对象复制到另一块上面。 解决前一种方法的不足,但是会造成空间利用率低下。因为大多数新生代对象都不会熬过第一次 GC。所以没必要 1 : 1 划分空间。可以分一块较大的 Eden 空间和两块较小的...

HD243608836的博客 3426

ThinkBook 16 2024 Ubuntu驱动全攻略:从无线网卡到触控板

本文详细介绍了ThinkBook 16 2024在Ubuntu系统下的驱动问题解决方案,涵盖无线网卡、蓝牙、显卡和触控板等关键硬件的驱动修复步骤。通过具体命令和配置指南,帮助用户快速解决兼容性问题,提升Ubuntu在ThinkBook上的使用体验。

weixin_29200741的博客 830

四种垃圾收集算法

四种垃圾收集算法

weixin_44330810的博客 1880

手机摄影新宠:In-line Hardware EIS如何让你的4K视频稳如鸡头(附实测对比)

本文深入解析了手机摄影中的In-line Hardware EIS(硬件级行内电子图像稳定)技术。通过对比传统软件EIS,阐述了其通过硬件管道实时处理实现极低延迟、减少画面裁切和有效抑制果冻效应的核心优势,并结合4K视频的日夜间实测,展示了该技术如何让手持拍摄的视频“稳如鸡头”,显著提升创作体验与成片质量。

tree的博客 998

视频生成工具本地部署完全指南:Seedance能装吗?有哪些开源替代?

本文系统介绍了视频生成模型的本地部署方案,分为三个部分:1)Seedance 2.0的混合部署模式,其开源组件可本地集成但核心功能需调用API;2)完全开源替代方案对比,包括LTX-2、Wan 2.1等模型的硬件需求与特点;3)详细部署指南,以ComfyUI+Wan 2.1为例,涵盖软件准备、模型整合、参数调优等步骤,并提供了显存优化和多GPU配置技巧。文章为需要离线视频生成能力的用户提供了完整技术路径。

小明的博客 1万+

垃圾收集算法——新生代和老年代(JVM)

1、分代收集理论 现在的垃圾收集器基本都遵循了“分代收集”的理论 弱分代假说:大多数对象都是朝生夕死的(就是利用完基本就是死了) 强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡。 把分代理论放到虚拟机里就形成了我们经常听到的老年代和新生代两个区域,每次垃圾回收都会有大量的对象死去,而活下来的对象就会逐渐放到老年代中去,这就是上面说的强分代假说。 但是实际中对象的死活不不仅仅是分代这么简单,例如:老年代中的对象指引到新生代中,如果回收新生代的对象,就会造成老年代中对象指向的丢失。由引出了第三条

weixin_56289362的博客 3918

别再乱改宏定义了!STM32F103程序移植保姆级教程(从C8T6到ZET6实战)

本文详细解析了STM32F103程序从C8T6移植到ZET6的实战步骤,重点介绍了硬件差异、开发环境配置、时钟陷阱及外设处理等关键点。通过修改宏定义(如STM32F10X_HD)、调整启动文件和时钟配置,确保移植顺利进行。适合嵌入式开发者参考,避免常见移植问题。

weixin_42567497的博客 217

JVM GC堆 新生代,老年代的划分及回收算法

Java堆(Java Heap)是JVM所管理的最大内存区域,也是所有线程共享的一块区域,在JVM启动时创建。 此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。 Java堆是垃圾回收器管理的主要区域,百分之九十九的垃圾回收发生在Java堆,另外百分之一发生在方法区,因此又称之为”GC堆”。根据JVM规范规定的内容,Java堆可以处于物理上不连续的内存空间中。 当前JVM对于堆的垃圾回收,采用分代收集的策略。根据堆中对象的存活周期将堆内存分为新生代和老年代。在

yygr的博客 2122

VirtualBox安装Win10虚拟机超详细教程(附微软官方镜像下载)

本文提供了一份详细的VirtualBox安装Win10虚拟机教程,涵盖从环境准备、工具下载到系统安装与初始配置的全过程。特别推荐使用微软官方镜像下载,确保系统纯净安全。此外,还分享了性能优化技巧和常见问题解决方案,帮助用户高效搭建稳定的Windows测试环境。

weixin_29243279的博客 920

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 686

【JVM系列详解】jvm垃圾回收机制(中)——垃圾回收算法

垃圾回收是JVM中十分重要的内容,也是面试常考察的点。 本文为垃圾回收系列的中篇,将详细介绍垃圾回收算法。其中重点在于分代垃圾回收算法。

m0_51214238的博客 2230

044、镜头脏污与异物检测:产线 AOI 检测方案与 ISP 脏污补偿

文章摘要(148字) 本文针对镜头生产中的脏污检测问题,提出产线AOI检测与ISP补偿结合的解决方案。产线端采用明场、暗场、偏振三通道联合检测技术,将油污漏检率从8.3%降至0.2%。ISP端通过RAW域局部梯度分析和频域补偿算法,动态修复产线漏检的微小脏污。作者结合实战案例,详细分析了传统灰度阈值法的局限性,并给出多模态检测的代码实现要点,强调必须建立"产线拦截+终端补偿"的双重防护机制。

sundong_81的博客 230

面试官,不要再问我“Java GC垃圾回收机制”了

Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈。 楔子-JVM内存结构补充 在上篇《JVM之内存结构详解》中有些内容我们没有讲,本篇结合垃圾回收机制来一起学习。还记得JVM中堆的结构图吗? 图中展示了堆中三个区域:Eden、From Survivor、To Survivor。从图中可以也可以看到它们的大小比例,准确...

程序新视界 1万+

066、AR 应用中虚拟物体漂移抖动?IMU 融合 + 光流追踪的视觉里程计优化方案

AR应用中虚拟物体漂移抖动优化方案 摘要:针对AR应用中虚拟物体漂移抖动问题,提出一种IMU融合与光流追踪的视觉里程计优化方案。关键点包括:1) 采用IMU预积分技术处理高频噪声,通过中值积分计算帧间相对运动约束;2) 使用金字塔LK光流追踪像素运动,通过中值偏差法剔除异常值;3) 构建10帧滑动窗口的紧耦合优化框架,将IMU预积分约束和光流重投影约束联合优化。实验表明,该方法有效解决了时间戳未对齐导致的"跳舞箭头"现象,在手机端实现稳定30fps的AR定位精度,漂移误差降低至厘米级。特别提醒:IMU与视觉

ai技术增长的博客 161

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JVM垃圾回收面试题详解

第一部分:面试题 本次分享我们将尝试回答以下问题: GC 是什么? 为什么要有 GC? 简单说一下java的垃圾回收机制。 JVM的常见垃圾回收算法有哪些? 为什么要使用分代回收机制? 如何判断一个对象是否存活? 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存? 第二部分:深入原理 好,让我们开始吧。还是那句话,如果时间不够可以直接拉到最后看答案。 jav...

Java笔记 8846

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

字节跳动二面面试官问:JVM垃圾回收器和回收算法,我全靠这个逆天改命!

垃圾回收器与内存分配策略 垃圾回收器与垃圾回收算法 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录垃圾回收器与内存分配策略前言一、如何判断对象已"死"(重点)1.1 引用计数法1.2可达性分析算法二.回收方法区(重点)三.垃圾回收算法(重点)3.1 标记-清除算法3.2复制算法(新生代回收算法)3.3标记-整理算法(老年代回收算法)3.4分代收集算法四.垃圾收集器4.1Serial收集器(新生代收集器,串行GC)4.2ParNew收集器(新生代收集器,并行GC)4.3Paral

ILOVEMYDEAR的博客 3552

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Java八股面试系列】JVM-垃圾回收

讲解了Jvm关于对象判活算法,垃圾回收算法以及引用的类型

asdfasaa的博客 2322

面试之JVM垃圾回收

可达性分析法就是目前的主流算法,也是java正在使用的算法。它的做法是,通过一系列被称为“GC Roots”的对象作为起点,从这些起点开始往下搜索,搜索所走过的路径称为引用链(Reference Chain)。当一个对象没有和任何引用链相连,即称为该对象不可达(图论的说法),认为该对象死亡。来看下面这张图:上图中A、B、C都跟GC Roots有直接或间接的引用关系,所以是存活对象。而D、E、F虽然相互之间有引用,但是和GC Roots并无引用关系,所以是死亡对象。

NBlinge的博客 1674

jvm-垃圾回收算法-面试必问必会

不同的算法的算法将决定垃圾回收的效率。常见的垃圾回收算法包括标记清除、复制算法、标记整理、分代回收。

qq_29031985的博客 1150

JVM垃圾回收面试题及原理

介绍对象什么时候可以被垃圾器回收、垃圾回收算法、JVM中的分代回收、垃圾回收器、强引用、软引用、弱引用、虚引用的区别的原理及相关面试题

2303_81059616的博客 1653

【面试必备】JVM垃圾回收算法

CMS会产生浮动垃圾 CMS产生浮动垃圾过多时会退化为serial old,效率低,因为在上图的第四阶段,CMS清除垃圾时是并发清除的,这个时候,垃圾回收线程和用户线程同时工作会产生浮动垃圾,也就意味着CMS垃圾回收器必须预留一部分内存空间用于存放浮动垃圾 而G1没有浮动垃圾,G1的筛选回收是多个垃圾回收线程并行gc的,没有浮动垃圾的回收,在执行‘并发清理’步骤时,用户线程也会同时产生一部分可回收对象,但是这部分可回收对象只能在下次执行清理是才会被回收。新生代并行收集器,追求高吞吐量,高效利用 CPU。

m0_67740632的博客 1563

【JVM系列】你说说都有哪些垃圾回收器

垃圾回收的是新生代、永久代对吧?那永久代还会进行回收吗?会的,永久代里的废弃常量和无用的类会被回收。例如类里面的常量没有其他任何引用,如果发生内存回收,有必要的话会进行。。。

JavaSouth南哥 3262

十五.吊打面试官系列-JVM优化-JVM垃圾回收器详解

继上篇文章《JVM垃圾回算法详解》,我们本篇文章来讲解一下JVM垃圾回收器。垃圾标记算法是标记哪些对象是垃圾,垃圾回收算法是回收的理论算法,垃圾回收器才是真正回收垃圾的组件。不同的垃圾回收器使用了不同的垃圾回收算法。

墨家巨子@俏如来 1697

面试必问的JVM垃圾收集机制详解

作为一名有八年经验的Java后端开发工程师,我深知垃圾回收(GC)机制在日常开发中的重要性。GC不仅是Java自动内存管理的核心,更是**系统稳定性和性能调优的关键

Minoz_wl的博客 703

JVM面试题之JVM垃圾回收篇

JVM高频面试题垃圾回收算法、垃圾回收器、JVM调优内容介绍

Java码农杂谈 1480
上一篇: 『面试必问JVM系列』垃圾回收器与内存分配策略
下一篇: 『面试必问JVM系列』常见的垃圾回收器详解
Java___interview
博客等级 码龄6年 154粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值