jvm-all-7-垃圾清除算法

[复制链接]
发表于 2025-3-25 14:30:16 | 显示全部楼层 |阅读模式

1、主流垃圾清除算法有哪些

目前主流的垃圾收集算法有3种:
标记-清除算法(MarkSweep)
复制算法( Copying)
标记-整理算法(Mark Compact)
垃圾算法的作用?
当成功区分出内存中存活对象和死亡对象后,GC接下来的任务就是执行垃圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用内存空间为新对象分配内存。

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

世界上第一个GC算法,于1960年由Lisp之父John McCarthy在其论文中发布。顾名思义,标记-清除(Mark-Sweep)算法分为两个阶段:
标记阶段-先标记出所有需要回收的对象
清除阶段-统一回收所有被标记的对象

image.png

image.png

image.png

image.png

2、年轻代为什么要设计两个Survivor(form,to)空间

什么是复制算法,它解决什么问题?

为了解决 标记-清除 算法的内存碎片缺陷,复制算法于Marvin L. Minsky在1963年被提了出来。它将堆内存分成两个区域(例如:from area 和 to area)。这两个空间的大小一样。GC复制算法利用from区做分配,当from区满了以后,会将存活的对象全部复制到to区,当复制完成以后会将from区和to区互换,这样GC也就结束了。这样一来就不容易出现内存碎片的问题。

先说下图
A是RCRoot,它引用了B D.C没有引用源
如果采用标记清除算法的话
标记阶段:A B D是存活对象
清除阶段:把C当做垃圾,清除掉这种情况下,就会出现碎片问题,红色位置就是碎片,不能使用

image.png

image.png

image.png

image.png

复制算法有什么优缺点

优点:
1.没有碎片化:每次进行复制时都会将活动对象重新集中(压缩),避免了碎片化。2.吞吐量高: GC 复制算法只搜索并复制活动对象,因此能在较短时间内完成 GC它消耗的时间与活动对象的数量成正比,而不受堆大小的影响。
缺点:
1.浪费一半的内存,要命

3、什么是标记整理算法

image.png

image.png

4、JVM为什么要采用分代收集算法

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

5、什么对象绕过年轻代直接进入老年代

image.png

image.png

image.png

6、年轻代的survivor区对象如何进入老年代

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

GMT+8, 2025-4-19 08:57 , Processed in 0.067321 second(s), 35 queries Archiver|手机版|小黑屋|Attic ( 京ICP备2020048627号 )

快速回复 返回顶部 返回列表