【Java 虚拟机原理】垃圾回收算法 ( 标记-清除算法 | 复制算法 | 标记-整理算法 )

简介: 【Java 虚拟机原理】垃圾回收算法 ( 标记-清除算法 | 复制算法 | 标记-整理算法 )

文章目录

总结

一、标记-清除算法

二、复制算法

三、标记-整理算法

总结


常用的垃圾回收算法 :


标记-清除算法 ;

复制算法 ;

标记-整理算法 ;

这些算法没有好坏优劣之分 , 都有各自的 优势 和 弊端 , 都有各自的 使用场景 ; 一般的垃圾回收 , 都是几种垃圾回收算法结合起来一起使用 , 不同的场景下 , 使用不同的垃圾回收算法 ;


分代收集算法 : 该垃圾回收算法不是特定的回收算法 , 而是 合理地使用上述 3 33 个算法 , 在 不同的内存空间内 , 使用不同的垃圾收集器 ;


这里的分代 指的是 年轻代 , 老年代 ; 年轻代又分为 Eden 和 Survivor 两个区域 , Survivor 又分为 From 和 To 两个区域 ;






一、标记-清除算法


堆 内的内存区域如下 , 内存区域分为一个个内存块 , 某个对象可能占用 2 22 个内存块 , 也能占用若干个内存块 ;


如果 定位 找到了 垃圾对象 , 那么 将该 垃圾对象 进行标记 , 如下图 , 标记为 橙色 ;


标记好之后 , 在执行 GC 内存回收时 , 会 将 被标记的 内存 回收 ;

image.png



标记-清除算法优缺点 :


优点 : 算法 实现简单;

缺点 : 产生了很多 不连续的内存 , 如果对象比较大 , 要用 5 55 个内存块 , 会出现 OOM ;





二、复制算法


将 内存区域 , 分为两部分 ;


对象只放在 左侧区域 , 右侧区域 空着 ;


左侧区域 的 垃圾对象 回收后 , 将 存活 的对象 , 拷贝到 右侧区域 中 ;


image.png



复制算法优缺点 :


优点 : 解决了 内存碎片 问题 ; 效率高 ;

缺点 : 只能使用 一半内存 ;

复制算法 适合使用 内存量较小 , 但是 操作很频繁的区域 , 如 : 在 年轻代 的 Survivor 中 , 使用的就是 复制算法 垃圾回收机制 ;






三、标记-整理算法


标记-整理算法 是 标记-清除算法 的更完善的版本 , 标记-整理算法 解决了 内存碎片问题 ;


内存回收后 , 将内存中的对象重新 紧密地 排列 , 消除内存碎片 ;


image.png


标记-整理算法 优缺点 :


优点 : 消除了内存碎片 ;

缺点 : 性能较低 ; 执行该垃圾回收算法时 , 需要 对内存进行重排 , 此时不能随意变动内存的数据结构 , 因此 执行该 标记-整理算法 时 , 整个线程需要整体停下来 , 但这样大大影响程序的执行效率 ;


标记-整理 算法 , 不能用在 内存操作 活跃的场景中 , 如 : 老年代的垃圾回收 , 使用的是 标记-整理 算法 ;


目录
相关文章
|
13天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
35 6
|
1月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
65 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
25天前
|
监控 算法 Java
深入理解Java的垃圾回收机制
【10月更文挑战第22天】在Java的世界里,有一个默默无闻却至关重要的角色——垃圾回收(Garbage Collection, GC)。就像城市的清洁工一样,它默默地清理着不再使用的内存空间,确保我们的程序运行得既高效又稳定。但你真的了解垃圾回收是如何工作的吗?让我们一起探索这个看似简单却充满奥秘的过程,看看它是如何影响你的Java应用性能的。
|
1月前
|
存储 监控 算法
Java中的内存管理与垃圾回收机制解析
本文深入探讨了Java编程语言中的内存管理方式,特别是垃圾回收机制。我们将了解Java的自动内存管理是如何工作的,它如何帮助开发者避免常见的内存泄漏问题。通过分析不同垃圾回收算法(如标记-清除、复制和标记-整理)以及JVM如何选择合适的垃圾回收策略,本文旨在帮助Java开发者更好地理解和优化应用程序的性能。
|
1月前
|
算法 Java 开发者
Java中的垃圾回收机制:从原理到实践
Java的垃圾回收机制(Garbage Collection, GC)是其语言设计中的一大亮点,它为开发者提供了自动内存管理的功能,大大减少了内存泄漏和指针错误等问题。本文将深入探讨Java GC的工作原理、不同垃圾收集器的种类及它们各自的优缺点,并结合实际案例展示如何调优Java应用的垃圾回收性能,旨在帮助读者更好地理解和有效利用Java的这一特性。
|
1月前
|
监控 算法 Java
Java中的内存管理:理解垃圾回收机制
【10月更文挑战第2天】 在本文中,我们将深入探讨Java编程语言中的内存管理机制,特别是垃圾回收机制。我们将从基本原理、垃圾回收算法到实际应用场景全面解析,帮助你更好地理解和优化Java应用的内存使用。无论你是初学者还是有经验的开发者,这篇文章都能带给你新的启发和思考。
32 2
|
1月前
|
存储 算法 Java
【JVM】垃圾释放方式:标记-清除、复制算法、标记-整理、分代回收
【JVM】垃圾释放方式:标记-清除、复制算法、标记-整理、分代回收
50 2
|
1月前
|
算法 JavaScript 前端开发
垃圾回收算法的原理
【10月更文挑战第13天】垃圾回收算法的原理
24 0
|
1月前
|
存储 监控 算法
深入理解Java内存模型与垃圾回收机制
【10月更文挑战第10天】深入理解Java内存模型与垃圾回收机制
20 0
|
1月前
|
监控 算法 Java
Java中的垃圾回收机制深度解析
【10月更文挑战第10天】 本文深入探讨了Java语言核心特性之一的垃圾回收机制(Garbage Collection, GC),揭示了其在内存管理中的关键角色。通过对GC的工作原理、分类、算法以及调优策略的细致分析,旨在帮助开发者更好地理解并有效利用这一机制,提升Java应用的性能与可靠性。不同于常规摘要,本文聚焦于为读者提供一份关于Java GC全面而深入的解读,助力把握Java内存管理的精髓。
下一篇
无影云桌面