JVM GC算法和过程

GC回收算法

1、标记清除算法(Mark-Sweep算法)

       先标记然后删除,这个算法效率不高。而且容易导致内存碎片多,难以找到连续足够大的内存片供使用。

2、复制算法(Copying)

        将内存分为两块,一块是在使用的。这块使用到一定程度,开始回收。将里面还活着的对象复制到另一半中。让后清理整半块内存。缺点就是内存利用率不高,只有一半。而且存活对象多时候,复制也是很费劲的事。JVM 年轻代GC的具体实现,就是使用这个算法去gc对象。

3、分代收集算法-也是标志压缩算法-mark-compact

       和标志清除算法,类似,只是删除后,还做内存移动,形成连续的内存块供调用。好处就是gc后有成片的内存块,缺点就是移动内存开销大。

JVM GC过程

        Java堆内存可分配的空间有两个区域:年轻代和年老代。年轻代用以保存生存周期短的对象,而年老代则是保存生存周期长的对象。

         新生代区又分为三个子区域:Eden,Survivor1,Survivor2。

         垃圾回收的过程:如果新生代Eden区满了,则启动一轮新生代中的对象GC,生存下来(没有被回收掉)的Eden中的对象和Survivor1区中的对象一并复制到Survivor2中。两个Survivor区域是互相切换使用的(就是说,下次从Eden和Survivor2中复制到Survivor1中)。如果某个对象的年龄(每次GC所有生存下来的对象长一岁)超过某个阈值,或者Survivor2(下次是Survivor1)区域满了,则将对象移到老生代(Old区)。最终如果老生代也满了,就会启动full GC。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值