GC 垃圾回收

Posted ytcxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GC 垃圾回收相关的知识,希望对你有一定的参考价值。

GC

几个算法

  • 标记 - 清理 会产生内存碎片

  • 标记 - 整理 : 清除一个地方的内容,后面的内容自动补上

    • 缺点: 代价太大了
  • 复制算法: 将整个内存一分为二,分别记为1区2区。 当一个区快满的时候,把还没有被标记的内容复制到另外一个区,被标记的代表要删除的,就不用复制了。然后把当前区的内容全部清除。这个时候剩下的内容就都在另外一个区了,而且还是紧凑的。

    • 缺点: 需要两倍的空间

    技术图片

分为 young区 和 old区

young 区又分为:

S0: 幸存者0区

S1: 幸存者1区

E : 伊甸园区

默认比例为 1 : 1 : 8

因为变量很多都是临时的,所以很容易夭折,所以 E 区就大一些。

Young GC 的过程

S0 与 S1 是交替执行的,

当 E区快满的时候:

把 E + S0 复制到 S1, 复制完之后, E + S0 就可以清除了

把 E + S1 复制到 S0, 复制完之后, E + S1 就可以清除了

交替执行

用的是复制算法

Old GC 过程

对象怎么才能到 Old 区呢?

一个对象在Young区,经历一次GC,年龄就会增加一岁,当年龄到大16岁了,就会到Old区了。 16是默认值(有的可能还不一样)

当Old区也满的时候,整个Java程序就会暂停,来进行垃圾回收,所以这个GC 又叫 Full GC, 采用的方法就是

标记-清除算法, 标记-整理算法。

内容来自free-coder 这位 UP主,这是链接

以上是关于GC 垃圾回收的主要内容,如果未能解决你的问题,请参考以下文章

GC垃圾回收(3)- 三色标记算法

jvm基础--GC垃圾回收机制

从垃圾回收GCDetails看JVM GC原理

java中是怎样进行垃圾回收的?

6.GC垃圾回收算法和垃圾收集器的关系

「JVM基础」——垃圾回收基础(GC相关)