echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。
堆分为:新生代、老年代、S0、S1
对象的产生怎么分配区域
- 新生的对象直接分配到->新生代(Eden)
- S0是我们的Eden区出现无法存储某些对象的时候或者存储满了只有,整理Eden区就会存放到S0
- S1和S0的作用是一样的,但是他是针对S0的
- 当我们对象经历过15次GC之后,他就会被移入老年区(Old)
15次GC就被认为认定为老年区对象了。
回收算法有哪些?
- 标记回收
- 标记整理
- 复制清除
标记清除
- 优势:清除算法的优点,算法简单,实现容易了。
- 缺点:使用过程中会逐渐产生被细化的分块,不久后就会导致无数的 小分块散布在堆的各处,导致后续对象的分配空间不规整。
标记整理
- 优势:能够有效的解决内存碎片问题
- 缺点:整理阶段,由于移动了可用对象,需要去更新引用。实现相对困难,而且对于内存消耗也会更高
复制清除算法
- 优势:吞吐量大、不会产生碎片问题
- 缺点:内存空间的浪费,GC成本增加
堆分区都用那些对应的回收算法
- 新生代->使用复制回收算法
- 老年代->使用标记整理算法