(JVM)四种垃圾回收算法

在 JVM 中,垃圾回收(GC)是核心机制之一。为了提升性能与内存利用率,JVM 采用了多种垃圾回收算法。本文总结了 四种常见的 GC 算法,并结合其优缺点与应用场景进行说明。


1. 标记-清除(Mark-Sweep)

工作流程

  1. 标记:从 GC Roots 出发,标记所有存活对象。

  2. 清除:回收未标记的对象,释放内存空间。

优点

  • 实现简单。

  • 不需要对象移动。

缺点

  • 会产生 内存碎片,导致大对象分配困难。

  • 标记和清理效率相对较低。

应用

  • 常用于 老年代(Old Generation) 的早期实现。


2. 标记-整理(Mark-Compact)

工作流程

  1. 标记:标记存活对象。

  2. 整理:将存活对象移动到一端,按顺序排列,清理边界外的内存。

优点

  • 消除了 内存碎片

  • 内存利用率更高。

缺点

  • 需要移动对象,成本较高(复制和更新引用)。

应用

  • 常用于 老年代
    👉 老年代对象存活率高、体积大,不能用复制算法(浪费内存),也不适合只用标记-清除(碎片多),因此更适合标记-整理。


3. 复制算法(Copying)

工作流程

  1. 将内存分为两块相等的区域(From、To)。

  2. 每次只使用一块区域(From)。

  3. GC 时,把存活对象复制到另一块区域(To),然后清空 From。

优点

  • 无内存碎片。

  • 内存分配只需移动指针,效率高。

缺点

  • 内存利用率低(只能使用一半空间)。

  • 复制存活对象需要开销。

应用

  • 常用于 新生代(Young Generation)
    👉 新生代对象生命周期短,大部分很快被回收,存活率低,复制的开销不大。


4. 分代收集(Generational Collection)

核心思想

不同对象的生命周期不同,采用不同的回收算法:

  • 新生代:存活率低 → 使用 复制算法,效率高。

  • 老年代:存活率高、对象大 → 使用 标记-清除标记-整理

优点

  • 综合利用不同算法的优势。

  • 性能和内存利用率较高。

缺点

  • 实现复杂。

应用

  • HotSpot JVM 主流实现就是基于分代收集思想的(新生代 + 老年代)。


总结对比表

算法原理优点缺点应用场景
标记-清除标记存活对象,清理未标记对象实现简单有碎片,效率低老年代(早期)
标记-整理标记存活对象并移动整理无碎片对象移动,成本高老年代
复制算法复制存活对象到另一块区域快,无碎片浪费内存(50%利用率)新生代
分代收集新生代复制 + 老年代标记整理综合性能好实现复杂主流 JVM 使用

总结

  • 新生代:对象生命周期短 → 复制算法

  • 老年代:对象大、存活率高 → 标记-整理

  • 分代收集:融合多种算法,实际生产环境的主流方案。

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

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

相关文章

论文阅读:VGGT Visual Geometry Grounded Transformer

论文阅读:VGGT: Visual Geometry Grounded Transformer 今天介绍一篇 CVPR 2025 的 best paper,这篇文章是牛津大学的 VGG 团队的工作,主要围绕着 3D 视觉中的各种任务,这篇文章提出了一种多任务统一的架构,实现一次输…

python编程:一文掌握pypiserver的详细使用

更多内容请见: python3案例和总结-专栏介绍和目录 文章目录 一、 pypiserver 概述 1.1 pypiserver是什么? 1.2 核心特性 1.3 典型应用场景 1.4 pypiserver优缺点 二、 安装与基本使用 2.1 安装 pypiserver 2.2 快速启动(最简模式) 2.3 使用私有服务器安装包 2.4 向私有服务…

Git reset 回退版本

- 第 121 篇 - Date: 2025 - 09 - 06 Author: 郑龙浩(仟墨) 文章目录Git reset 回退版本1 介绍三种命令区别3 验证三种的区别3 如果不小心git reset --hard将「工作区」和「暂存区」中的内容删除,刚才的记录找不到了,怎么办呢&…

ARM 基础(2)

ARM内核工作模式及其切换条件用户模式(User Mode, usr) 权限最低,运行普通应用程序。只能通过异常被动切换到其他模式。快速中断模式(FIQ Mode, fiq) 处理高速外设中断,专用寄存器减少上下文保存时间,响应周期约4个时钟周期。触发条件为FIQ中…

Flutter 性能优化

Flutter 性能优化是一个系统性的工程,涉及多个层面。 一、性能分析工具(Profiling Tools) 在开始优化前,必须使用工具定位瓶颈。切忌盲目优化。 1. DevTools 性能视图 DevTools 性能视图 (Performance View) 作用:…

Spring事件监听机制(三)

为了理解EvenListener注解的底层原理,我们可以自己实现一个类似的注解模拟实现。1.定义MyListener注解Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)public interface MyListener {}2.注解使用Componentstatic class SmsService {private static…

基于Springboot + vue3实现的小区物业管理系统

项目描述本系统包含管理员和用户两个角色。管理员角色:用户管理:管理系统中所有用户的信息,包括添加、删除和修改用户。房屋信息管理:管理房屋信息,包括新增、查看、修改和删除房屋信息。车辆信息管理:管理…

交叉熵和KL散度

这个问题之前我也是傻傻分不清,决定整理一下,用更印象深刻的方式让人记住。核心联系:交叉熵 KL 散度 真实分布的熵 交叉熵作为 “绝对” 度量,会综合真实分布的熵(固有难度)与预测误差,直接体…

HTML 各种事件的使用说明书

HTML 各种事件的使用说明书 1. HTML 事件简介 HTML事件是浏览器或用户在网页上执行的动作或发生的事情。当这些事件发生时,可以通过JavaScript来响应和处理这些事件,从而实现网页的交互功能。事件处理是Web前端开发中实现动态交互的核心机制。 基本概…

Kafka面试精讲 Day 10:事务机制与幂等性保证

【Kafka面试精讲 Day 10】事务机制与幂等性保证 在分布式消息系统中,如何确保消息不丢失、不重复,是系统可靠性的核心挑战。Kafka自0.11版本起引入了幂等性Producer和事务性消息机制,彻底解决了“至少一次”语义下可能产生的重复消息问题&am…

时序数据库简介和安装

一、简介1. 什么是时序数据库?时序数据库是专门用于存储和处理时间序列数据的数据库系统。时间序列数据是指按时间顺序索引的一系列数据点。每个数据点都包含:一个时间戳:记录数据产生的时间。一个或多个指标值:例如温度、湿度、C…

comfyUI 暴露网络restful http接口

https://zhuanlan.zhihu.com/p/686893291 暴露websocket接口。 打开开发者选项 如图

linux系统address already in use问题解决

linux系统上某个端口被占用,如何解决?1.找到占用的进程编号:netstat -tulnp | grep :80002.强制杀死该进程kill -9 80603其他说明:1.查找占用端口的进程,可以用:lsof -i :8001 # 或者使用 netstat -tulnp |…

基于SpringBoot的家政保洁预约系统【计算机毕业设计选题 计算机毕业设计项目 计算机毕业论文题目推荐】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【Linux系统】 4. 权限(一)

一. shell 命令及运行原理基本理解1)广义理解的操作系统包括:操作系统内核、外壳程序(shell命令行、图形化界面)、必要的软件。2)狭义的操作系统:操作系统内核。3)在用户和内核之间有一个外壳程…

6.python——字符串

python中用’ 和" "创建字符串 python的子字符串截取用[]取字符串拼接可以直接用相加。 python三引号允许一个字符串跨多行,其中无需进行转义(所见即所得)。 当你需要一块HTML或者SQL时,这时用字符串组合,特…

足球数据API接口的技术特性与应用价值分析

一、接口概述现代足球数据接口是基于RESTful架构的数据服务,通过标准化方式提供赛事相关信息。这类接口通常采用JSON格式传输数据,支持跨平台调用,为开发者提供结构化的足球赛事数据。二、数据覆盖范围主流足球数据接口通常包含以下数据类型&…

<android>反编译魔改安卓系统应用并替换

我们知道安卓系统基于稳定性、维护便利、性能优化等原因并未对原生系统apk进行混淆加密处理,由此就方便了我们反编译替换原生应用。 首先我们设备需要是root后的,我是使用的是小米5,刷的24.3版本的面具。首先我们需要取系统apk,这…

【Qt】项目的创建 and 各个控件的使用

一、项目的创建🔍然后点击新建项目。📖注意:路径不要带有中文,不然运行不了代码。📖qmake是一个构建工具,在 Qt 写的程序,设计的到一系列的 "元编程" 技术,什么是元编程技…

大模型架构演进全景:从Transformer到下一代智能系统的技术路径(MoE、Mamba/SSM、混合架构)

当前大模型发展正经历着一个关键的技术分水岭。虽然Transformer架构自2017年问世以来主导了整个AI领域,但我们正见证着多种创新架构的涌现,每种都在试图解决Transformer的固有局限。本指南将系统性地解析当前主流架构的技术原理、适用场景与发展趋势&…