java内存分配与垃圾回收策略

java内存分配

java对象分配主要分配在堆上的新生代Eden区域,如果启动了本地线程分配缓存,将会优先分配在TLAB上,少数情况下将会分配在老年代中。

  • 对象优先在Eden分配:大多数情况下,会优先在Eden区域分配,当Eden区域不足时,虚拟机将会发起一次Minor GC
  • 老年代分配:大对象直接进入老年代,长期存活的对象将进入老年代(1.虚拟机为每个对象定义一个对象年龄计数器,如果对象在Eden分配后,经过第一次Minor GC,存活后移入Survivor区域,年龄增加1,没经过一次Minor GC,年龄就会增加1岁,默认达到15岁时,会移动到老年代,可以通过-XX:MaxTenuringThreshold 设置 2.当在survivor空间中相同年龄所有对象大小的总和大于survivor空间的一半,那么年龄大于或等于该对象年龄的对象直接进入老年代,不需要等待达到最高年龄限制)

Full GC

  • minor GC:minor GC是发生在新生代空间,在发生Minor GC 之前会先检查老年代最大可用的连续空间是否大于新生代所有对象总空间,如果大于新生代所有对象的总空间,那么可以进行Minor GC 否则,jvm将会检查HandlePromotionFailfure,如果设置为true,则将会检查老年代连续空间是否大于每次晋升到老年代对象的平均大小,如果大于,将会进行一次Minor GC,否则小于或者设置了flase则会进行Full GC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值