JVM-垃圾收集算法

前言

在 Java 中,垃圾收集(Garbage Collection)是一种自动管理内存的机制,它负责在运行时识别和释放不再被程序使用的内存,从而避免内存泄漏和悬空引用问题。本篇文章将介绍三种常见的垃圾收集算法。

标记-清除(Mark-Sweep)算法

“标记-清除”(Mark-Sweep)算法是最早出现也是最基础的垃圾收集算法是,在1960年由Lisp之父
John McCarthy所提出。如它的名字一样,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。标记过程就是对象是否属于垃圾的判定过程。

具体收集过程如下:

优点:算法比较简单,实现起来比较容易

缺点:

  1. 执行效率不稳定,如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低;
  2. 内存空间的碎片化问题,标记、清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

标记-复制算法

标记-复制算法常被简称为复制算法。为了解决标记-清除算法面对大量可回收对象时执行效率低
的问题,1969年Fenichel提出了一种称为“半区复制”(Semispace Copying)的垃圾收集算法,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

具体收集过程如下:

优点:

  1. 实现简单,运行高效
  2. 没有碎片化的问题

缺点:内存缩小为了以前的一半,空间浪费严重

标记-整理(Mark-Compact)算法

针对老年代对象的存亡特征,1974年Edward Lueders提出了另外一种有针对性的“标记-整理”(Mark-Compact)算法,其中的标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向内存空间一端移动,然后直接清理掉边界以外的内
存。因此收集过程如下:

标记-整理算法结合了标记-清除算法和复制算法的优点,这种算法可以减少内存碎片,但需要移动对象,可能会影响程序的执行性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OCT2Former: A retinal OCT-angiography vessel segmentationtransformer论文总结

论文(COMPUT METH PROG BIO):OCT2Former: A retinal OCT-angiography vessel segmentation transformer 源码:https://github.com/coreeey/OCT2Former 一、摘要 背景与目的:视网膜血管分割在视网膜疾病自动筛查与诊断中起着重要作用。如何分…

2024 抖音欢笑中国年(五):Wasm、WebGL 在互动技术中的创新应用

前言 随着 Web 前端技术的不断发展,越来越多的新兴技术方案被引入到 Web 开发中,其中 Wasm 和 WebGL 作为前端领域的两大利器,为开发者带来了更多的可能性。 本文将结合2024 年抖音欢笑中国年的部分项目,重点介绍如何利用 Wasm 和…

TCP 协议特性

1. TCP 基本认识 TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的; 可靠的:无论的网络链…

【批量区域识别内容重命名】批量识别图片区域文字并重命名,批量图片部分识别内容重命文件,PDF区域识别提取重命名

我们在工作和生活中经常遇到这样的需求:比如将以下的图片区域识别进行重命名,批量识别后改成以时间和工作内容重命名,便于日后检索,快速查询 首先我们拍摄照片用到的是水印相机,这里的文字呢我们需要加个背景&#xff…

C++模版初阶----函数模版、类模版

C模版初阶 1. 泛型编程2. 函数模板2.1 函数模板概念2.2函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 函数模版的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化 总结 1. 泛型编程 泛型编程 : 编写与类型无关的通用代码,是代码复用的一种手段…

利用STM32 HAL库实现USART串口通信,并通过printf重定向输出“Hello World“

一、开发环境 硬件:正点原子探索者 V3 STM32F407 开发板 单片机:STM32F407ZGT6 Keil版本:5.32 STM32CubeMX版本:6.9.2 STM32Cube MCU Packges版本:STM32F4 V1.27.1 上一篇使用STM32F407的HAL库只需1行代码实现US…

#STM32F407VET6(天空星)标准库和HAL驱动ILI9341

一、驱动方式:软件SPI,屏幕像素320*240 二、标准库含触摸,HAL库不含触摸 三、立创参考的文档 【立创天空星ST32F407VET6】模块移植手册 - 飞书云文档 (feishu.cn)https://lceda001.feishu.cn/wiki/MFNpw4STVi5ImikkcH1clWrlnqb 四、引脚分…

HIVE无法启动问题

​ 启动不了hive 一直在加载中! 问题:当我们打开电脑 想要学习hive时 我们却发现 它一直卡在启动页面 true一直后没有信息或者报错 原因:我们在之前学习时 在配置hdfs的高可用时(High Availability 简称HA) 高可用…

2024第十五届蓝桥杯省赛C++A组程序设计题解

ps:没有答案,考场上的代码,不一定对,大佬们轻喷,可以提供点更好的思路~ 试题C:训练士兵 解题思路 对于每次训练,需要考虑采用士兵单独训练还是组团训练的方式,故每次训练将所需训练…

【网站项目】“最多跑一次”小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

面试(06)————MySQL篇

目录 问题一:在MySQL中,如何定位慢查询? 方案一:开源工具 方案二:MySQL自带慢日志 模拟面试 问题二:这个SQL语句执行很慢,如何分析的呐? 模拟面试 问题三:了解过索引…

2024 IDM最新破解版及软件介绍

*IDM:信息时代的高效管理工具** 在快节奏的现代社会中,随着信息的爆炸式增长,如何高效、有序地管理信息成为每个人都需要面对的挑战。IDM,作为一种信息管理工具,正在逐渐受到人们的青睐。 IDM,全称Inform…

Android 出现4G模块无法上网问题

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

【prometheus】k8s集群部署AlertManager实现邮件和钉钉告警

目录 一、AlertManager概述 1.1 alertmanager简介 1.2 AlertManager核心概念 1.2.1 分组 1.2.2 抑制 1.2.3 静默 1.2.4 客户的行为 1.2.5 高可用性 二、Alertmanager部署邮箱告警 2.1 邮箱配置 2.2 Alertmanager global和route路由配置 2.3 部署prometheus和alertM…

如何在PostgreSQL中创建一个新的数据库,并指定所有者?

文章目录 解决方案示例代码 PostgreSQL是一个强大的开源关系型数据库管理系统,它允许用户创建和管理多个数据库。在PostgreSQL中创建一个新的数据库并指定所有者是一个常见的操作。下面,我们将详细解释如何执行这一操作,并提供示例代码。 解…

Redis入门到通关之数据结构解析-SkipList

文章目录 ☃️概述☃️总结 ☃️概述 SkipList(跳表)是一种数据结构,用于实现有序元素的动态集合,它的设计目的是在有序链表的基础上通过增加多级索引来提高查找效率。 跳表的核心思想是在原始链表的基础上建立多层索引&#xf…

如何使用 Node.js 发送电子邮件全解和相关工具推荐

大多数Web应用程序都需要发送电子邮件。它可能用于注册、密码重置、状态报告,甚至是完整的市场营销活动,如新闻和促销。本教程解释了如何在Node.js中发送电子邮件,但其概念和挑战适用于您正在使用的任何系统。 你会在 npm 上找到大量与电子邮…

贪吃蛇的实现(一)

一、前言 学完C语言和数据结构的链表部分后,贪吃蛇的游戏也终于可以着手的实现了。对于贪吃蛇这个经典游戏,相信小伙伴们都不会太陌生,接下来我们 一起去剖析关于贪吃蛇游戏内部的一些逻辑结构和整体思维。 二、Win32 API 本章实现贪吃蛇会用…

读天才与算法:人脑与AI的数学思维笔记06_算法的进化

1. 现代算法 1.1. 知识不仅建立在真理之上,也建立在错误之上。 1.1.1. 卡尔荣格(Carl Jung) 1.2. 现代算法是可以自学的,尤其是推荐系统算法,它可以根据每个人的喜好推荐有趣的东西给我们 1.2.1. 算法通过与用户之…

PTA L2-052 吉利矩阵

题目 解析 这题考的是搜索剪枝 可行性剪枝: 即判断当前行(列)是否已经超过L和剩下的格子都填最大值是否小于L,若是则剪枝。 当前行数大于1时,判断上一个填完的行是否等于L,若否,则剪枝。 当前行…