首页 > 编程知识 正文

说一下 jvm 有哪些垃圾回收算法,JVM垃圾回收算法

时间:2023-05-05 05:46:24 阅读:190103 作者:3220

引用计数法、标签消除法、标签压缩法、复制算法、世代算法等。

1 .参考计数器法:假设有某个对象a。 假设其中一个对象引用了a。 如果对象a的参考计数器1引用失败,则对象a的参考计数器为-1。 如果对象a的参考计数器的值为0,则对象a不被引用,并且可以回收。

优缺点:

优点:

1 .实时性强,不需要等内存用完再开始回收,运行时按对象计数器是否为0进行回收。

2 .在垃圾回收期间,不需要挂起APP应用程序。 申请内存时,如果内存不足,会立即报告outofmember错误。

3 .在地域上,更新对象的计数器只会影响该对象,而不会扫描所有对象。

坏处:

1 .每次引用对象时都需要更新计数器,这需要一点时间。

2 .浪费CPU资源,尽管内存足够,但在运行时进行计数器的合计。

3 .无法解决循环引用问题。 (最大的缺点)

如果a和b两个对象具有交叉引用,则即使a和b均为空,也永远不会回收a和b。

2 .消除标记法

标记:从根节点标记引用的对象

清除:未在标记中参照的对象是垃圾对象,可以进行清理

优点:解决了参考计数器算法中的循环引用问题,从根节点回收未引用的对象

坏处:

1 .效率低下,需要通过标记和清除两种动作遍历所有对象,GC时需要暂停APP,在要求交互性的APP应用中体验非常差。

2 .通过标记清除算法清理的内存碎片严重,回收的对象存在于内存的各个角落,使得清理的内存不一致。

3 .标记压缩算法

优化了标记去除算法,在清理阶段将存活对象压缩到内存边缘,通过清理边界以外的垃圾解决了碎片问题。

优点:解决了碎片问题

缺点:进一步增加了标记压缩算法,对象移动内存位置,对效率有一定的影响。

4 .复制算法

将内存空间分割为2部分,每次使用其中的一部分时,将使用中的对象复制到其他的内存空间,清空该内存,交换内存的作用

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。