Java Memory New Size
作用范围
New Size 相关参数主要用来控制 JVM 新生代内存大小。
相关参数
New Size 主要参数有 4 个,分别介绍一下:
-Xmn__
新生代总大小
-XX:NewSize=__
新生代初始大小
-XX:MaxNewSize=__
新生代最大大小
-XX:NewRatio=__
老年代 / 新生代比例
使用案例
-Xmn128M 代表新生代内存最大为 128M 大小。
-XX:NewSize=128M 代表新生代内存初始值为 128M,同时也表示最小内存为 128M。
-XX:MaxNewSize=128M 代表新生代内存最大值为 128M,同时也表示最大内存为 128M。
-XX:NewRatio=2 代表老年代和新生代的内存占比为 8:2
参数默认值
以下为默认值均为 Linux 平台下的默认值。
参数 | 默认值 | JDK 版本 |
---|---|---|
-Xmn | - | - |
-XX:NewSize | 20971520 | jdk1.8 |
-XX:MaxNewSize | 333971456 | jdk1.8 |
-XX:NewRatio | 2 | Jdk1.8 |
注意事项
-Xmn 等价于 -XX:MaxNewSize=__ -XX:NewSize=__;例如 -Xmn=128M 等价于 -XX:MaxNewSize=128M -XX:NewSize=128M。
在每次新生代有效内存做调整之后,新生代的几个组成部分也会调整位置,包括 Edan、From、To 三块内存的起止位置。
设置新生代有效内存最大值,当新生代内存回收后,有效内存可能会扩容,这个参数代表了可扩容的最大值。
设置新生代有效内存初始大小,也可以说是新生代有效内存最小值,当新生代回收后有效内存可能会缩容,这个参数舅代表了可缩容的最小值。
实践问题
当 -XX:NewSize 设置的比 -XX:MaxNewSize 大时,会发生什么?
JVM 会发出警告,使用 NewSize 作为新的 MaxNewSize 值。
$ java -XX:NewSize=256M -XX:MaxNewSize=128M Test Java HotSpot(TM) 64-Bit Server VM warning: NewSize (262144k) is greater than the MaxNewSize (131072k). A new max generation size of 262144k will be used. Hello Java
当 -XX:NewSize 设置的比 -Xmn 大时,会发生什么?
JVM 会发出警告,使用 NewSize 作为新的 -Xmn 值。
$ java -Xmn128M -XX:NewSize=256M Test Java HotSpot(TM) 64-Bit Server VM warning: NewSize (262144k) is greater than the MaxNewSize (131072k). A new max generation size of 262144k will be used. Hello Java
当 -XX:MaxNewSize 设置的比 -Xmn 大时,会发生什么?
正常执行。
$ java -Xmn128M -XX:MaxNewSize=256M Test Hello Java
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!