关于虚拟机中堆内存结构的详解


新建的对象会放在年轻带里面,年轻代填满会触发minor gc,minor gc会清除包括s0,s1在内的所有年轻代里面不用的垃圾。


Eden(伊甸园)里面没有被清除的对象就是幸存下来的,就会被放入s0或者s1中,每次所有幸存对象必须放入一个survivor space区域,意味着必须有一个survivor space是空的。对象上面的数字代表他的年龄,即幸存的次数,每次幸存以后都会换survivor space,并且年龄+1.


所以每执行一次minor GC,幸存的对象就会从一个survivor space跳到另外一个survivor space。并且年龄+1.如下图。


当幸存对象的年龄到达某个值后,就会从年轻代进入老年代。如下图以8为例。


永恒代,放常用库文件和方法


Eden和survivor的比例为8:1,老年代比年轻代内存大。如果老年代内存满了,就会触发major GC或者full GC。触发full GC就会出现所谓的STW(stop the world)现象。即所有的进程都挂起等待清理垃圾。

major GC是回收老年代的垃圾。Full GC是回收老年代和年轻代的垃圾。



许多Java的垃圾收集器都使用了引用的根集,作为分析对象存活与否的依据。引用的根集是正在执行的Java程序随时都可以访问引用的变量的集合——也就是存在堆栈或是静态存储空间上的引用变量。从这些根集变量出发可直接或是间接到达的对象,垃圾收集器会认为这些对象是生命尚存的对象;相对的从这些根集变量出发通过任意途径都无法到达的对象,就是死亡的,它们就会成为下一次垃圾收集的对象。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值