垃圾收集算法
2024-05-07 21:51:17 0 举报
垃圾收集算法是一种用于释放和回收在计算机系统中不再使用的内存空间的技术。这种算法主要关注于如何有效地识别和释放无用的内存空间,以便为新的数据和程序分配内存。垃圾收集算法主要包括标记-清除算法、复制算法、标记-整理算法和分代算法等。这些算法各有优缺点,适用于不同的场景。例如,标记-清除算法简单易懂,但可能会产生内存碎片;复制算法能够避免内存碎片,但需要双倍内存空间;标记-整理算法能够避免内存碎片,但需要更多的运行时间。总的来说,垃圾收集算法对于保证计算机系统的高效运行和防止内存溢出等问题具有重要意义。
作者其他创作
大纲/内容
Survivor空间
混合收集(Mixed GC)
追踪式垃圾收集(Tracing GC) / 间接垃圾收集
主流Java虚拟机中均未使用引用计数式垃圾收集算法进行垃圾回收/收集
1)“标记-整理”(Mark-Compact)算法,其中的标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向内存空间一端移动,然后直接清理掉边界以外的内存2)标记-清除算法与标记-整理算法的本质差异在于前者是一种非移动式的回收算法,而后者是移动式的优点:空间不浪费且无内存碎片缺点:内存复制代价较大
老年代收集(Major GC/Old GC)
HotSpot虚拟机的堆内存的细化分区
当前商业虚拟机的垃圾收集器,大多遵循“分代收集”的理论进行涉及。分代收集理论是经验法则,经验法则如下:1)弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。2)强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。
新生代收集(Minor GC/Young GC)
1)分为2个阶段:标记、清除。标记用于识别哪些可回收,哪些是存活对象;清除为对可回收对象进行回收2)是最基础的收集算法,后续的算法均是以此为基础进行的优化&扩展缺点:1)执行效率不稳定(如果堆中包含大量对象,而且其中大部门是需要被回收的)2)内存空间碎片化问题(碎片化太多,如果分配较大的对象时无法找到足够的空间而触发另外一次垃圾收集动作)
收集整个Java堆和方法区的垃圾收集
标记-复制算法
概念:部分收集(Partial GC)
分类收集理论:
标记-整理算法
垃圾收集算法
指目标不是完整收集整个Java堆的垃圾收集
整堆收集(Full GC)
1)标记-复制算法常被简称为复制算法。由于将内存划分2块同大小内存块,同一时间仅可使用一个内存区域,所以也成为“半区复制”2)半区复制:它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉优点:实现简单,运行高效缺点:可用内存缩小为了原来的一半,空间浪费
指目标只是新生代的垃圾收集
在分类收集理论下,java堆分为不同的区。Java堆不同的分区拆分出不同的算法及叫法:
混合收集(Mixed GC):指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。
1)在Java堆划分出不同的区域后,垃圾收集器针对不同的区域实现与其特征相匹配的垃圾回收算法:标记-复制算法、标记-清除算法、标记-整理算法2)针对不同的区域,垃圾回收有不同的叫法:Minor GC、Major GC、Full GC
指目标只是老年代的垃圾收集。目前只有CMS收集器会有单独收集老年代的行为。另外请注意“Major GC”这个说法现在有点混淆,在不同资料上常有不同所指,读者需按上下文区分到底是指老年代的收集还是整堆收集。
标记-清除算法
堆空间(8:1:1)
引用计数式垃圾收集(Reference Counting GC) / 直接垃圾收集
Eden空间
0 条评论
下一页