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 垃圾回收的主要内容,如果未能解决你的问题,请参考以下文章