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


Java     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!