详解gc(垃圾回收)机制四:GC标记-清除算法

简介: 详解gc(垃圾回收)机制四:GC标记-清除算法

标记-清除算法

GC标记-压缩算法由标记阶段和清除阶段构成

我们在详解gc(垃圾回收)机制(一)   简单说明了 标记-清除算法

gc步骤:

1:暂停程序业务逻辑,对所有对象进行标记分类

2:找出程序可达对象和不可达对象

3:删除不可达对象

标记清除算法就是如此简单明了,不会出现循环引用的问题,

但是标记清除算法需要暂停程序,会造成程序卡顿

同时每次标记都需要扫描整个堆内存空间

步骤一:遍历根引用的对象:

image.png

步骤二:将已经引用的对象打上标记

image.png

步骤三:遍历引用对象的子对象,继续打上标记

image.png

步骤四:遍历整个堆,将堆上没有标记的对象清除:

image.png

优点

1:算法简单

缺点

1:碎片化

可以看出,在gc之后,每个空闲的堆空间都是不连续的,大大小小,在之后分配内存可能会出现大内存对象无法分配到有效堆空间的问题

2:分配速度慢

因为内存分块不是连续的,所以每次分配新的内存,都需要遍历整个空闲链表,找到适合内存对象的内存块

3:与写时复制技术不兼容

因为在gc标记阶段时,也会改动所有的活动对象的标记,导致触发了"写时复制",从而变成了不管有没有重写对象,都会触发写时复制.

该缺点可以通过一个新的活动对象(位图结构),将活动对象对应上,在标记时,只在新活动对象改动,而不改动活动对象

目录
相关文章
|
19天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
15天前
|
缓存 Java Python
python垃圾回收&缓存机制
python垃圾回收&缓存机制
|
24天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制(GC)
本文将探讨Java的自动内存管理核心——垃圾回收机制。通过详细解析标记-清除算法、复制算法和标记-整理算法等常用垃圾回收算法,以及CMS、G1等常见垃圾回收器,帮助读者更好地理解Java应用的性能优化和内存管理。同时,探讨分代收集、分区收集等策略在实际项目中的应用。结语部分总结了垃圾回收机制在Java开发中的重要性,并展望了未来可能的发展。
28 0
|
2月前
|
缓存 监控 Java
"Java垃圾回收太耗时?阿里HBase GC优化秘籍大公开,让你的应用性能飙升90%!"
【8月更文挑战第17天】阿里巴巴在HBase实践中成功将Java垃圾回收(GC)时间降低90%。通过选用G1垃圾回收器、精细调整JVM参数(如设置堆大小、目标停顿时间等)、优化代码减少内存分配(如使用对象池和缓存),并利用监控工具分析GC行为,有效缓解了高并发大数据场景下的性能瓶颈,极大提升了系统运行效率。
56 4
|
3月前
|
存储 算法 Java
JVM 垃圾回收算法与垃圾回收器
JVM 垃圾回收算法与垃圾回收器
40 3
|
2月前
|
算法 Java 应用服务中间件
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
|
3月前
|
监控 算法 Java
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
Java面试题:如何在Java中触发一次Full GC?请详细解释垃圾回收机制和知识
276 4
|
5月前
|
算法 Java
JVM GC和常见垃圾回收算法
JVM GC和常见垃圾回收算法
83 0
|
5月前
|
Java Go
Golang底层原理剖析之垃圾回收GC(二)
Golang底层原理剖析之垃圾回收GC(二)
105 0
|
4月前
|
算法 Java
垃圾回收机制(Garbage Collection,GC)是Java语言的一个重要特性,它自动管理程序运行过程中不再使用的内存空间。
【6月更文挑战第24天】Java的GC自动回收不再使用的内存,关注堆中的对象。通过标记-清除、复制、压缩和分代等算法识别无用对象。GC分为Minor、Major和Full类型,针对年轻代、老年代或整个堆进行回收。性能优化涉及算法选择和参数调整。
59 3