常见的垃圾回收算法

常见的垃圾回收算法新生代中对象朝生夕灭 存活时间短 采用复制算法 但如果存在循环引用 即使对象实际上已经不再使用 计数器也可能永远不为 0 导致内存泄漏

大家好,欢迎来到IT知识分享网。

1、引用计数法

原理:
为每个对象维护一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用被删除时,计数器值就减1。当计数器值为0时,该对象就不可达了,可以被回收。

优缺点:
实时性较高,无需等到内存不够时才开始回收;在垃圾回收过程中,应用无需挂起;但如果存在循环引用,即使对象实际上已经不再使用,计数器也可能永远不为0,导致内存泄漏。

2、标记清除法(Mark-Sweep)

原理:
分为两个阶段,首先是从根对象(roots)开始递归访问可达的对象,给其打上标记;然后遍历整个内存,回收未被打上标记的内存空间。

优缺点:
在存活对象比较多的情况下效率较高;但标记和清除过程效率较低,并且标记后可能会产生内存碎片。

3、标记压缩法(Mark-Compact)

原理:
在标记清除法的基础上,将所有存活的对象都向一端移动,然后直接清理掉边界以外的内存。

优缺点:
解决了标记清除法产生的内存碎片问题,但标记和压缩过程需要消耗更多时间。

4、复制算法(Copying)

原理:
将内存分为大小相等的两块,每次只使用其中一块。当这一块内存用完时,就将还存活的对象复制到另一块上,然后再把已使用过的内存空间一次清理掉。

优缺点:
在存活对象比较少的情况下效率高,没有碎片;但内存空间的使用率不高,只有原来的一半。

5、分代收集算法(Generational Collection)

原理:
根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,新生代又可以分为Eden区、From Survivor区和To Survivor区。新生代中对象朝生夕灭,存活时间短,采用复制算法;老年代中对象存活率高,采用标记清除或标记压缩算法。

优缺点:
可以根据对象的不同存活周期选择合适的垃圾回收算法,提高垃圾回收效率;但需要维护多个内存区域,增加了管理的复杂性。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/126905.html

(0)
上一篇 2025-09-14 22:00
下一篇 2025-09-14 22:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信