引用计数法

给每个已占空间都设置上一个引用计数器,当指向这块空间的引用数为0时,便清理这块儿空间。

初识JVM——GC算法
这个方法实现起来比较简单,但问题较多。

因为计数器本身就有较大的资源消耗,很多场景都不适用。

复制算法

给新生代再次划分,分为 伊甸区(Eden)和 两个幸存区(from 和 to)。

初识JVM——GC算法
此方法运行时效性好,比较快。但:

两个幸存区中 一定有一个是空的,这样就相当于浪费了一部分空间。

标志-清除-压缩

过程如图:
初识JVM——GC算法
标志清除可以很好的利用空间,但这样会产生较多的空间碎片,降低了空间的利用率。

所以,又加了一步 压缩

这三个过程下来 还是比较浪费时间的。但的确解决了空间利用的问题。(又是用时间去换空间。)


到底有没有最佳方法呢?

还是那句话,没有最好 只有 最适合。

据统计发现,99%的对象会在 新生代 死亡,所以我们可以在这里使用 复制算法


而老年区 不太容易被淘汰,所以我们用 标志-清除,清除几次之后,发现碎片较多了,我们可以走一次压缩

这样我们的GC就体面多了。

相关文章:

  • 2021-12-27
  • 2021-11-07
  • 2021-07-16
  • 2021-04-27
  • 2022-12-23
  • 2021-08-27
  • 2021-08-10
猜你喜欢
  • 2021-04-19
  • 2021-10-05
  • 2021-12-20
  • 2022-01-13
相关资源
相似解决方案