jvm知识梳理1

关于内存分配

1.jvm的内存氛围堆内存和非堆内存,重点来说堆内存。

2.堆内存中有两个地方,一个是年轻代,即young,一个是老年代,即old,这两个区域的大小比例为1:3。

3.在年轻代中又分为三个部分,一个eden(伊甸园)区域,两个survivor(幸存者)区域,s0和s1,它们的大小比例为8:1:1

关于gc

初始化对象的时候,如果一个对象很大,则直接把它放到old区,否则放到eden区,当进行YGC的时候,采用复制算法,把存活的对象放到s0,然后清除eden区域的所有内存,然后再有new的对象,则会放到eden区域,当eden区域要满了的时候,即eden区域无法再为new的对象分配内存的时候,触发YGC,此时会把eden区域存活的对象和s0区域的存活对象全部放到s1区域,此时如果s1区域放不下,那么则直接把它们放到old区域,如此循环往复。那么old区域会越来越大,直到连old区域也没法分配内存了,则进行一次FullGC。下面是摘自其他网友的GC触发条件说明:

 

  • young GC:当young gen中的eden区分配满的时候触发。注意young GC中有部分存活对象会晋升到old gen,所以young GC后old gen的占用量通常会有所升高。
  • full GC:当准备要触发一次young GC时,如果发现统计数据说之前young GC的平均晋升大小比目前old gen剩余的空间大,则不会触发young GC而是转为触发full GC(因为HotSpot VM的GC里,除了CMS的concurrent collection之外,其它能收集old gen的GC都会同时收集整个GC堆,包括young gen,所以不需要事先触发一次单独的young GC);或者,如果有perm gen的话,要在perm gen分配空间但已经没有足够空间时,也要触发一次full GC;或者System.gc()、heap dump带GC,默认也是触发full GC。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值