欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

垃圾回收机制

最编程 2024-10-18 11:26:51
...

1. 分代收集

  • 分代收集(Generational Collector)算法就是其中一种针对GC性能优化算法,将堆内存划分为新生代、老年代。
  • 在分代收集算法中,对象的存储具有以下特点:
    • 对象优先在 Eden 区分配。
    • 大对象直接进入老年代。
    • 长期存活的对象将进入老年代,默认为 15 岁。
  • 基本概念
    • 对象的生命周期:每经历一次GC,对象年龄 + 1。
    • 伊甸区:是对象诞生的地方。经过经验的推算,大部分对象的生命基本活不过1岁。
    • 生存区:活过了1岁,但大部分也活不到成年15岁。这些对象每经历一次 GC,会在 SA 和 SB 之间反复横跳。
    • 老年区:极少数成年的对象 或者 大对象会被一开始放在这儿。

2. 标记复制

  • 按内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清掉。
    在这里插入图片描述
  • 虽然实现简单,内存效率高,不易产生碎片,但是最大的问题是可用内存被压缩到了原本的一半。且存活对象增多的话,Copying算法的效率会大大降低。

3. 标记清除

  • 分为两个阶段:标注和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。
    在这里插入图片描述
  • 最大的问题是内存碎片化严重,后续可能发生大对象不能找到可利用空间的问题。

4. 标记压缩(整理)

标记后不是清理对象,而是将存活对象移向内存的一端。然后清除端边界外的对象。

在这里插入图片描述