Java 中的标记-清除垃圾回收算法17 Mar 2025 | 4 分钟阅读 像标记-清除这样的垃圾回收算法会在后台运行,以管理 C++ 和 Java 等编程语言中的内存。当动态创建对象时,它们会占用堆中的内存。但是,如果我们不断创建对象而不释放内存,可能会导致内存不足错误。为防止这种情况,垃圾回收会自动释放程序中不再引用或不可访问的对象所占用的内存。它减轻了程序员在内存管理方面的负担,因为垃圾回收器会释放未引用的对象所占用的内存,确保有可用空间分配给新对象。 标记和清除算法标记-清除垃圾回收算法是一种简单高效的算法,用于回收应用程序不再使用的内存。该算法首先标记所有仍在使用的对象。一旦所有活动的(可访问的)对象都被标记,垃圾回收器就会遍历堆并回收所有未标记的对象。 1. 标记阶段:当创建一个对象时,其标记位最初设置为 0(false)。标记阶段负责识别堆中所有活动的(可访问的)对象。这是通过遍历堆并标记所有可从堆的根对象访问到的对象来实现的。堆的根对象是应用程序直接可访问的对象,例如局部变量和对象引用。 根变量是指向一个可从局部变量访问到的对象的变量。我们假设只有一个根。 算法 2. 清除阶段:清除阶段负责回收堆中所有未标记的对象。这是通过释放分配给未标记对象的内存来完成的。 算法 标记-清除算法被称为“跟踪式垃圾回收器”,因为它系统地跟踪并识别所有可以直接或间接从程序根引用可访问的对象。 示例
标记-清除算法的优点
标记-清除算法的缺点
![]() 图像中的绿色方块表示从根对象可访问的对象。白色方块表示从根对象不可访问的对象。 碎片化是指当小的、未使用的内存区域分散在整个堆中时发生的问题。当垃圾回收器回收不再需要的对象所占用的内存时,可能会发生这种情况。如果垃圾回收器不进行堆压缩,这些小的、未使用的内存区域可能会阻止分配新对象。 压缩是指重新排列堆中的对象,以便空闲内存区域是连续的。这可以通过移动堆中的对象或将它们复制到新位置来完成。 压缩可以减少碎片化并提高垃圾回收器的性能。当堆被压缩时,垃圾回收器可以快速找到空闲内存区域。 在您提供的示例中,存在五个大小分别为 1、1、2、3 和 5 个单位的空闲内存区域。这些空闲内存区域是碎片化的,意味着它们不是连续的。这阻止了分配需要 10 个内存单位的对象。 如果堆被压缩,这五个空闲内存区域将合并为一个大小为 12 个单位的空闲内存区域。这将允许分配需要 10 个内存单位的对象。 压缩可能耗时,因此垃圾回收器并非总是执行它。然而,对于经常出现碎片化问题的应用程序,压缩可能是有益的。 下一个主题Java 中的静态函数重载 |
创建 Java 身体质量指数 (BMI) 计算器需要实施多种使用不同公式计算 BMI 的方法。身体质量指数 (BMI) 是一种工具,用于根据身高和体重确定个人的身体脂肪。修改后的 BMI 公式,...
阅读 4 分钟
Java Scanner 类提供了 Int() 方法来读取整数值,Double() 方法来读取双精度值,Long() 方法来读取长整数值,等等。但是 Scanner 类中没有 Char() 方法来读取 Java 中的字符。在本节中,我们……
阅读 2 分钟
java.text.FieldPosition 类包含 getBeginIndex() 函数。可以使用 FieldPosition 类获取 FieldPosition 对象的第一个字符的索引。语法:public int getBeginIndex() 参数:此方法可以传递的参数数量为零。返回值:FieldPosition 对象的索引...
阅读 2 分钟
在 Java 中,非检查异常也称为运行时异常。非检查异常是异常的一个子集,不需要使用 throws 关键字在方法签名中声明。它们继承自 RuntimeException 类,该类本身是 Exception 的子类...
阅读 8 分钟
在 Java 中,sort() 方法是 java.util.Arrays 类中定义的一个静态且重载的方法。它用于对不同类型的数组值进行排序。它被广泛用于按升序组织数据。sort() 方法可应用于原始类型(int,...
阅读 10 分钟
二进制数制中两个连续值之间仅相差一位,这被称为“格雷码”。此外,数字信号处理和纠错也可以从中受益。将格雷码数字转换为其十进制等效数的过程称为...
阅读 4 分钟
Java 代码结构和组织很大程度上依赖于包和接口。它们在各种情况下以及出于不同目的工作。本文将探讨 Java 包和接口背后的基本概念。包和接口都充当一种容器...
阅读 2 分钟
在此问题中,给出了两个排序的链表(按非递减顺序)。任务是找出这两个链表的交集,即找出同时存在于两个链表中的元素。示例 1:输入:链表 1:12 -> 13 -> 35 ->...
阅读 8 分钟
IDE 是程序员生活中不可或缺的一部分,因为它提供了轻松开发应用程序的方式。IDE 的另一个优点是它支持各种流行的编程语言。如果一个人在掌握 IDE 或编辑器(如 Eclipse)方面有很好的专业知识,那将带来更多优势……
7 分钟阅读
MessageDigest 是哈希函数的返回值,也称为哈希值。哈希函数主要用于每个信息安全应用程序。哈希函数用于将数值转换为压缩数值。对于哈希函数,长度为...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India