码迷,mamicode.com
首页 > 其他好文 > 详细

GC 垃圾回收

时间:2020-05-31 20:11:39      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:mamicode   内存   暂停   产生   需要   清除   自动   不用   清理   

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 垃圾回收

标签:mamicode   内存   暂停   产生   需要   清除   自动   不用   清理   

原文地址:https://www.cnblogs.com/ytcxy/p/13020681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!