JVM虚拟机中,哪种垃圾回收算法适用于长尾对象处理?

2026-04-13 00:360阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计6142个文字,预计阅读时间需要25分钟。

JVM虚拟机中,哪种垃圾回收算法适用于长尾对象处理?

垃圾回收分为两个阶段:标记阶段和清除阶段。在堆内存中存在大量Java对象实例。在GC执行垃圾回收前,首先需要区分内存中哪些是存活对象,哪些是已死亡对象。只有被标记为存活的对象才会被保留。

垃圾回收分为两个阶段:标记阶段和清除阶段。

在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,这个过程称为垃圾标记阶段。

当成功区分出内存中存活对象和死亡对象后,GC接下来的任务就是执行垃圾回收,释放掉无用对象所占用的内存空间,这个过程称之为清除阶段。

标记阶段

当一个对象已经不再被任何的存活对象继续引用时,便可判定为已经死亡。

判断对象存活一般有两种方式:

  • 引用计数算法
  • 可达性分析算法

引用计数算法

引用计数算法(Reference Counting):对每个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。


例如:一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。


优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性。

缺点:需要单独的字段存储计数器,增加了存储空间的开销。每次赋值都需要更新计数器,伴随着加法和减法操作,增加了时间开销。且无法处理循环引用的情况(致命),这也导致在Java的垃圾回收器中没有使用这类算法。

阅读全文

本文共计6142个文字,预计阅读时间需要25分钟。

JVM虚拟机中,哪种垃圾回收算法适用于长尾对象处理?

垃圾回收分为两个阶段:标记阶段和清除阶段。在堆内存中存在大量Java对象实例。在GC执行垃圾回收前,首先需要区分内存中哪些是存活对象,哪些是已死亡对象。只有被标记为存活的对象才会被保留。

垃圾回收分为两个阶段:标记阶段和清除阶段。

在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,这个过程称为垃圾标记阶段。

当成功区分出内存中存活对象和死亡对象后,GC接下来的任务就是执行垃圾回收,释放掉无用对象所占用的内存空间,这个过程称之为清除阶段。

标记阶段

当一个对象已经不再被任何的存活对象继续引用时,便可判定为已经死亡。

判断对象存活一般有两种方式:

  • 引用计数算法
  • 可达性分析算法

引用计数算法

引用计数算法(Reference Counting):对每个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。


例如:一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。


优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性。

缺点:需要单独的字段存储计数器,增加了存储空间的开销。每次赋值都需要更新计数器,伴随着加法和减法操作,增加了时间开销。且无法处理循环引用的情况(致命),这也导致在Java的垃圾回收器中没有使用这类算法。

阅读全文