Java Memory Thread Size

作用范围

  Thread Size 主要用来控制 JVM 线程栈的大小。

相关参数

  Thread Size 主要参数有 4 个,分别介绍一下:

  • -Xss

    线程栈大小,单位 KB

  • -XX:ThreadStackSize

    线程栈大小,单位 KB

  • -XX:VMThreadStackSize

    VMThread 范围内线程栈大小

  • -XX:CompilerThreadStackSize

    编译线程栈大小

使用案例

  • -Xss256k 代表线程栈大小为 256k。

  • -XX:ThreadStackSize=256k 代表线程栈大小为 256k。

  • -XX:VMThreadStackSize=256k 代表 VMThread 线程栈大小为 256k。

  • -XX:CompilerThreadStackSize=256k 代表编译线程栈大小为 256k。

参数默认值

   以下为默认值均为 Linux 平台下的默认值。

参数 默认值 JDK 版本
-XX:Xss - -
-XX:ThreadStackSize 1024K jdk1.8
-XX:VMThreadStackSize 1024K jdk1.8
-XX:CompilerThreadStackSize 0 jdk1.8

注意事项

  • Linux 下 Xss 线程栈最小值为 228K。

  • MacOS 下 Xss 线程栈最小值为 160K。

  • Xss 与 ThreadStackSize 等价。

  • Xss 会按照 page_size(默认为 4) 对齐。

  • ThreadStackSize 64 位 OS 下默认值为 1M,32 位 OS 下默认值为 512K。

  • VMThreadStackSize 64 位 OS 下默认值为 1M,32 位 OS 下默认值为 512K。

  • CompilerThreadStackSize 64 位 OS 下默认值为 4M,32 位 OS 下默认值为 2M。

  • Java 线程 new Thread(); 非 Java 线程 GC 线程、VMThread 线程。

实践问题

  • Xss 设置的比 228K 小会怎样?

    程序报错,无法启动 JVM。

    $ java -Xss128k Test
    The stack size specified is too small, Specify at least 228k
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
  • 同时设置 Xss 和 ThreadStackSize 会怎样?

    谁后设置以谁为准。

    $ java -Xss512k -XX:ThreadStackSize=256k Test
    
    $ jps
    6964 Test
    
    $ jinfo -flag ThreadStackSize 6964
    -XX:ThreadStackSize=256
    $ java -XX:ThreadStackSize=256k -Xss512k Test
    
    $ jps
    6978 Test
    
    $ jinfo -flag ThreadStackSize 6978
    -XX:ThreadStackSize=512


Java     

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