JVM的分代gc机制

java语言并不要求JVM有gc,不过常用的JVM都有gc。这里介绍hotspot的generation gc,即分代gc的机制。


分代gc的算法是,主要根据一个统计数据,就是java98%的对象都不会被长时间引用。所以分代gc就把java堆分为young generation(新生代)和old generation(老生代)。young generation的gc称为minor gc,young generation分为一个Eden区和两个survivor区,一般对象都放在Eden区,等Eden区满了之后会转移到survivor区,这个从Eden区满了之后转到surviror区满了之后会转移到Old generation,如果两个survivor都满了会直接转移到old generation。注意:两个survivor区是同个等级的,同一时间两个 survivor空间中有一个用来保存对象,而另一个是空的,用来在下次的新生代GC中保存对象。新生代执行频率高,速度快;老生代执行频率低,速度慢。old generation的gc称为major gc,就是常说的full gc。minor gc会引发full gc,当eden+survivor1大于old generation的剩余空间时,会引发full gc。


还有个代是永生代(permenant generation),这里存储的是一些类信息,方法的信息,静态变量和classloader的引用,这个代属于方法区,sun的JVM不会去回收这个代。像spring和hibernate这些需要动态类型支持的框架,这个区域需要有足够的空间。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值