内存分配和GC触发

对象分配

  1. 优先在Eden区分配。当Eden区没有足够空间分配时, VM发起一次Minor GC, 将 Eden区和其中一块Survivor区内尚存活的对象放入另一块Survivor区域。如Minor GC时survivor空间不够,对象提前进入老年代,老年代空间不够时进行Full GC;
  2. 大对象直接进入老年代,避免在Eden区和Survivor区之间产生大量的内存复制, 此 外大对象容易导致还有不少空闲内存就提前触发GC以获取足够的连续空间.

对象晋级

  1. 年龄阈值:VM为每个对象定义了一个对象年龄(Age)计数器, 经第一次Minor GC后 仍然存活, 被移动到Survivor空间中, 并将年龄设为1. 以后对象在Survivor区中每熬 过一次Minor GC年龄就+1. 当增加到一定程度(-XX:MaxTenuringThreshold, 默认 15), 将会晋升到老年代.
  2. 提前晋升: 动态年龄判定;如果在Survivor空间中相同年龄所有对象大小的总和大 于Survivor空间的一半, 年龄大于或等于该年龄的对象就可以直接进入老年代, 而无 须等到晋升年龄.

从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC, 对老年代GC称为Major GC,而Full GC是对整个堆来说;

Minor GC触发条件:当Eden区满时,触发Minor GC。

Full GC触发条件:

  1. System.gc()
  2. 老年代空间不足
  3. 永生区空间不足
  4. 统计得到的MinorGC晋升到旧生代的平均大小大于老年代 的剩余空间
  5. 堆中分配很大的对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值