4. 内存分配和回收策略

JVM分代垃圾回收策略的基础概念

为什么要分代(新生代,老年代,永久代)

在这里插入图片描述

1. 新生代

所有新生成的对象首先都是放在新生代的。新生代的目标就是尽可能快速的收集掉那些生命周期短的对象

  • 新生代有划分为Eden、From Survivor和To Survivor三个部分, 为对象分配内存的时候,首先使用Eden空间
  • 经过GC后,没有被回收的会首先进入From Survivor区域,任何时候,都会保持一个Survivor区域完全空闲
  • From Survivor和To Survivor两个区域会根据GC的实际情况,进行互换,将From Survivor区域中的对象全部复制到To Survivor区域中

2. 老年代

在新生代的 survivor 区域中经历一定次数的Minor Gc之后仍然存活的对象,会放到老年代汇中

此外就是一些大对象,比如数据量较大的数组和集合

在虚拟机中可以设置超过内存限制的对象直接放到老年代,避免这种大对象进入到新生代在Eden 和 survivor区之间发生大对象复制

3. 永久代

jvm 中的方法区,用来存储类信息、静态变量、常量等信息,一般不会gc

内存分配和回收策略

1. 对象优先在Eden分配

对象先在新生代分配,新生代没有足够的空间分配时,虚拟机进行一次Minor GC

2. 大对象直接进入老年代

占用内存很大的字符串以及数组,如果放到新生代,容易出现内存还有很多空间就触发GC来清理出连续的空间存储大对象,并且也避免了大对象在新生代进行复制操作

3. 长期存活的对象进入老年代

指在survivor区存活过一次GC 年龄就会 +1, 当达到默认的 15岁时,就会进入老年代

4. 动态对象年龄判定

如果survivor区中的相同年龄的所有对象大小总和大于等于survivor空间的一半,那么大于等于这个年龄的所有对象进入老年代

5. 空间分配担保

在Minor Gc之前,老年代都会判断一下连续的空闲区域或者历次进入老年代对象的大小总和的平均数是否大于新生代所有对象的总和
,如果大于则进行 Minor Gc,否则进行 Full Gc
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值