JVM常见参数设置

2,165 阅读1分钟

1. 查看

-XX:+PrintFlagsFinal

  • 查看堆的默认值,使用下面的代码。
    其中 InitialHeapSize 为最开始的堆的大小,MaxHeapSize 为堆的最大值。

    $ java -XX:+PrintFlagsFinal -version | grep HeapSize
        uintx ErgoHeapSizeLimit                         = 0                                   {product}
        uintx HeapSizePerGCThread                       = 87241520                            {product}
        uintx InitialHeapSize                          := 134217728                           {product}
        uintx LargePageHeapSizeThreshold                = 134217728                           {product}
        uintx MaxHeapSize                              := 2147483648                          {product}
    java version "1.8.0_25"
    Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
    Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
    
  • 查看栈的默认值, 其中 ThreadStackSize 为栈内存的大小。

    $ java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
     intx CompilerThreadStackSize                   = 0                                   {pd product}
     intx ThreadStackSize                           = 1024                                {pd product}
     intx VMThreadStackSize                         = 1024                                {pd product}
    java version "1.8.0_25"
    Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
    Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
    

2. 堆

  • -Xmx:初始堆的大小

  • -Xms:最大堆大小,建议这两个参数大小保持一致,为物理内存的 1/4

  • -Xmn:指定新生代的大小(Eden + Survior from + Survior to)的大小,增大新生代的大小,老年代的大小将被减小,sun 官方推荐 新生代的大小:堆 = 3 : 8

  • -XX:NewSize:设置新生代大小

  • -XX:MaxNewSize:设置新生代的最大值-Xmn 相当于设同时设置 NewSize=MaxNewSize

  • -XX:NewRation:老年代:新生代 = 4,即 old:(Eden + Survivor from + Survivor to) ,则说明新生代为整个堆区的 1/5

  • -XX:SurvivorRation:设置 Eden 区和 Survivor。
    默认值为8;即:Eden:Survivor=8:1 ==> Eden:Survivor from:Survivor to = 8:1:1
    若值为3,即:Eden:Survivor=8:1 ==> Eden:Survivor from:Survivor to = 3:1:1

3. 方法区(非堆)

  • -XX:PermSize:设置方法区大小
  • -XX:MaxPermSize: 设置方法区的最大值
  • 1.8 之前可以理解为 永久区(PerSize,MaxPerSize)。
  • 1.8 之后使用 元数据区 取代。(MaxMetaspaceSize)。

4. 栈

  • -Xss:栈内存的大小