jvm之堆

一。概述:

 

 二、堆内存细分:

 从逻辑上jvm堆上包含方法区,但实际上 只包含 新生代和老年代

例子:

从上面的例子可知:Eden+S0+S1+Old Gen = 10M

jdk1.8和jdk1.8之前方法区的对比:

验证:

 三、堆内存大小设置和查看

a.设置堆空间大小的参数:

-Xms 用来设置堆空间(年轻代+老年代)的初始内存大小

        -X 是jvm的运行参数

        ms 是memory start

-Xmx 是用来设置堆空间(年轻代+老年代)的最大内存大小

b.默认堆空间的大小:

初始内存大小:物理电脑内存的 64分之1

最大内存大小:物理电脑内存大小的 4分之1

c.开发中建议将-Xms 和Xmx 设置成一样的值:因为避免频繁的扩展和降低内存对系统造成不必要的压力。

 这里将-Xms 和-Xmx 设置成600m 为什么显示的是575m:

因为只包含一个survivor 区。

d.查看设置的参数:

方式一:jps 查看到进程号,然后根据 jstat -gc 进程号

方式二:-XX+PrintGCdetails。

 四、年轻代和老年代细分及设置大小:

 

 

根据 -XX:NewRatio=2   (一般不会调动)设置新生代和老年代的比例。

可以根据jinfo -flag NewRatio 进程号  查看。

 根据 -XX:SurvivorRatio=8 (默认)设置Eden 和S0 和 S1 的比例。

 根据jvisualvm查看Eden和S0 和S1的比例是 6:1:1

原因是 自适应(-XX:+UserAdaptiveSizePolicy(默认有这个参数,去掉就好了))

 -Xmn 设置新生代大小。(一般设置用NewRatio 设置比例)

五、图解对象分配过程:

a、概述:

b、图解:

 

 注:红色的是垃圾,绿色的不是垃圾。

        S0 中绿色对象的 “1” 是年龄计数器。

        谁空谁是to。

        Eden区满的时候触发YGC S0和S1区满的时候不会触发YGC。

 

设置晋升老年代的阈值: -XX:MaxTenuringThreshold=15(默认是15)晋升到老年代。

c、总结:

六、对象分配过程特殊情况:

七:内存分配策略:wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 验证大对象直接进入老年代:

 

 说明一下空间分配担保:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值