JVM运行时内存:堆区指令参数大全



在这里插入图片描述

在这里插入图片描述


运行时内存整体结构如下图所示:

在这里插入图片描述

在这里插入图片描述


1. 如何设置堆的内存大小

● Java堆区用于存储Java对象实例,那么堆的大小在JVM启动时就已经设定好了,大家可以通过选项”-Xmx”和”-Xms”来进行设置。
○ “-Xms”用于表示堆区的起始内存,等价于-XX:InitialHeapSize
○ “-Xmx”则用于表示堆区的最大内存,等价于-XX:MaxHeapSize

● 一旦堆区中的内存大小超过“-Xmx”所指定的最大内存时,将会抛出OutOfMemoryError:heap异常。

● 通常会将 -Xms 和 -Xmx两个参数配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小,从而提高性能。

● heap默认最大值计算方式:如果物理内存少于192M,那么heap最大值为物理内存的一半。如果物理内存大于等于1G,那么heap的最大值为物理内存的1/4。
● heap默认最小值计算方式:最少不得少于8M,如果物理内存大于等于1G,那么默认值为物理内存的1/64,即1024/64=16M。最小堆内存在jvm启动的时候就会被初始化。


2. 如何设置新生代与老年代比例?

下面这参数开发中一般不会调:

● 配置新生代与老年代在堆结构的占比。
默认-XX:NewRatio=2,表示新生代占1,老年代占2,新生代占整个堆的1/3
○ 可以修改-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5

● 可以使用选项”-Xmn”设置新生代最大内存大小
○ 这个参数一般使用默认值就可以了。


3. 如何设置Eden、幸存者区比例?

  • 在HotSpot中,Eden空间和另外两个Survivor空间缺省所占的比例是8:1:1
  • 当然开发人员可以通过选项“-XX:SurvivorRatio”调整这个空间比例。比如-XX:SurvivorRatio=8

4. 参数设置小结

● 堆空间大小的设置:
○ -Xms:初始内存 (默认为物理内存的1/64);
○ -Xmx:最大内存(默认为物理内存的1/4);

● 配置新生代与老年代在堆结构的占比。赋的值即为老年代的占比,剩下的1给新生代
○ 默认-XX:NewRatio=2,表示新生代占1,老年代占2,新生代占整个堆的1/3
-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5

● 在HotSpot中,Eden空间和另外两个Survivor空间缺省所占的比例是8:1
○ 开发人员可以通过选项“-XX:SurvivorRatio”调整这个空间比例。比如-XX:SurvivorRatio=8

● -XX:MaxTenuringThreshold
○ 设置新生代垃圾的最大年龄。超过此值,仍未被回收的话,则进入老年代。
默认值为15

● -XX:+PrintGCDetails 输出详细的GC处理日志

● -XX:HandlePromotionFailure
○ 在发生Minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间,
○ 如果大于,则此次Minor GC是安全的
○ 如果小于,则虚拟机会查看-XX:HandlePromotionFailure设置值是否允许担保失败。
○ 如果HandlePromotionFailure=true,那么会继续检查老年代最大可用连续空间是否大于历次晋升到老年代的对象的平均大小,如果大于,则尝试进行一次Minor GC,但这次Minor GC依然是有风险的;如果小于或者HandlePromotionFailure=false,则改为进行一次Full GC。

在JDK 6 Update
24之后,HandlePromotionFailure参数不会再影响到虚拟机的空间分配担保策略,观察OpenJDK中的源码变化,虽然源码中还定义了HandlePromotionFailure参数,但是在代码中已经不会再使用它。JDK
6 Update 24之后的规则变为只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行Minor
GC,否则将进行Full GC。

● -XX:+PrintFlagsFinal
查看所有的参数的最终值(可能会存在修改,不再是初始值)
具体查看某个参数的指令: jps:查看当前运行中的进程
jinfo -flag SurvivorRatio 进程id


在这里插入图片描述



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值