• 基础 | JVM - [参数]


    §1 JVM 参数分类

    • 标准参数(-)
      所有的 JVM 实现都必须实现这些参数的功能
      向后兼容

      -version
      -help
      
      • 1
      • 2

      详细信息参阅 (此信息为下面指令提供)
      在这里插入图片描述

    • 非标准参数(-X):
      默认jvm实现这些参数的功能,但并不保证所有jvm实现都满足
      不保证向后兼容

      -Xint
      -Xmixed
      
      • 1
      • 2

      下面指令提示:
      -X 选项是非标准选项。如有更改,恕不另行通知。
      在这里插入图片描述

    • 非Stable参数(-XX)
      此类参数各个jvm实现会有所不同
      将来可能会随时取消

      XX 参数主要分为两种

      • boolean 型
        通常写作 -XX:+xxx-XX:-xxx,表示开启或关闭 xxx,如:

        -XX:+PrintGCDetails
        -XX:-UseParallelGC
        
        • 1
        • 2
      • KV 型
        即键值对形式,通常写作 -XX:key=value,如:

        -XX:MetaspaceSize=20m
        
        • 1

    §2 参数查看

    详细指令参考 基础 | JDK - [指令]

    查看 java 进程号
    jps -l


    查看 JVM 所有参数的实际值
    java -XX:+PrintFlagsFinal

    字段依次为

    • 参数类型
    • 参数名
    • 是否被修改(= 表示默认值,:= 表示被修改)
    • 参数类别
      • product :官方支持, JVM内部选项
      • rw :可动态写入的.
      • C1:Client JIT 编译器
      • C2:Server JIT 编译器
      • pd:platform Dependent 平台独立
      • lp64:仅 64 位JVM
      • manageable:代表可以运行时修改
      • diagnostic:用于虚拟机debug的
      • experimental:非官方支持的

    java -XX:+PrintFlagsFinal

    查看 JVM 所有参数的初始值
    java -XX:+PrintFlagsInitial

    查看所有改动过的 XX 参数
    jinfo -flags 进程号
    Non-default VM flags 中参数是系统改动过的参数
    Command line 中参数是认为改动过的参数
    在这里插入图片描述

    查看所有命令行参数
    java -XX:+PrintCommandLineFlags
    在这里插入图片描述

    看具体某具体 XX 参数
    jinfo -flag 参数名 进程号

    在这里插入图片描述
    在这里插入图片描述

    查看具体 X 参数
    无法直接查看,但可以通过查看堆的信息获取
    jmap -heap 进程号
    信息如下

    Heap Configuration:
       MinHeapFreeRatio         = 0
       MaxHeapFreeRatio         = 100
       MaxHeapSize              = 4219469824 (4024.0MB)
       NewSize                  = 88080384 (84.0MB)
       MaxNewSize               = 1406140416 (1341.0MB)
       OldSize                  = 176160768 (168.0MB)
       NewRatio                 = 2
       SurvivorRatio            = 8
       MetaspaceSize            = 21807104 (20.796875MB)
       CompressedClassSpaceSize = 1073741824 (1024.0MB)
       MaxMetaspaceSize         = 17592186044415 MB
       G1HeapRegionSize         = 0 (0.0MB)
    
    Heap Usage:
    PS Young Generation
    Eden Space:
       capacity = 66060288 (63.0MB)
       used     = 9248656 (8.820205688476562MB)
       free     = 56811632 (54.17979431152344MB)
       14.000326489645337% used
    From Space:
       capacity = 11010048 (10.5MB)
       used     = 0 (0.0MB)
       free     = 11010048 (10.5MB)
       0.0% used
    To Space:
       capacity = 11010048 (10.5MB)
       used     = 0 (0.0MB)
       free     = 11010048 (10.5MB)
       0.0% used
    PS Old Generation
       capacity = 176160768 (168.0MB)
       used     = 0 (0.0MB)
       free     = 176160768 (168.0MB)
       0.0% used
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    通过 java 代码查看内存

    public static void main(String[] args) throws InterruptedException {
        System.out.println("JVM params");
    
        System.out.println(Runtime.getRuntime().freeMemory());
        System.out.println(Runtime.getRuntime().maxMemory());
        System.out.println(Runtime.getRuntime().totalMemory());
        TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    说明
    freeMemory() + totalMemory() 是JVM 虚拟机从操作系统分配的内存

    • 如果配置了 -Xms 这俩值的和就是配置值
    • 如果没有配置 -Xms 这俩值的和就是比满足当前虚拟机运行再稍多一点
    • 这两部分的初始比例大约是 1:4,如下图
    • 这些内存中使用了的部分是 totalMemory(),没使用的是 freeMemory()
      在这里插入图片描述

    maxMemory() 是允许 JVM 使用的最大的内存值

    • 相当于 -Xmx 配置值
    • 没配置时默认大约 1/4 物理内存

    §3 标准参数

    查看版本
    -version
    在这里插入图片描述
    帮助
    -help
    在这里插入图片描述

    §4 -X 参数

    堆初始容量
    -Xms
    初始堆大小,默认约 1/64 物理内存
    -XX:InitialHeapSize 等价,实际属于 XX 参数
    为避免 JVM 内存忽高忽低,通常与 -Xmx 一致

    堆最大容量
    -Xmx
    最大堆大小,默认约 1/4 物理内存
    -XX:MaxHeapSize 等价,实际属于 XX 参数
    为避免 JVM 内存忽高忽低,通常与 -Xms 一致

    新生代容量
    -Xmn
    -XX:MaxNewSize 等价,实际属于 XX 参数
    通常,Eden:From:To:Old = 8:1:1:20

    栈容量
    -Xss
    单个线程栈的内存大小, 1M,与系统和硬件有关
    -XX:ThreadStackSize 等价,实际属于 XX 参数,其值为 0 时表示使用默认数值
    每个线程的栈的大小,不是总大小

    §5 -XX 参数

    元空间大小
    -XX:MetaspaceSize
    类似以前的永久代,用于实现 JVM 规范中的方法区
    但元空间直接使用本地内存,不在虚拟机中,因此默认只受本地内存影响
    但是,元空间默认大小 20 M 左右,频繁创建对象时容易出现 OOM:Metaspace
    因此此参数可以设大,比如取值 1024m

    直接内存大小
    -XX:MaxDirectMemorySize
    不同于 -XX:MetaspaceSize ,此参数可以是 NIO 拥有更多的 Direct Buffer Memory


    输出 GC 日志
    -XX:+PrintGCDetails
    会在发生 GC 或 Full GC 时输出 GC 日志
    GC 日志参考 基础 | JVM - [GC]

    在这里插入图片描述
    GC 日志如下图
    在这里插入图片描述
    FROM / TO 区比例
    -XX:SruvivorRatio
    实际值使用的是 Eden 对 FROM / TO 的倍数

    -XX:SruvivorRatio=8 时,Eden:FROM:TO = 8:1:1 (默认比例)
    -XX:SruvivorRatio=6 时,Eden:FROM:TO = 6:1:1

    Eden 区比例
    -XX:NewRatio
    实际值使用的是 Old 对 Eden 的倍数

    -XX:NewRatio=2 时,Old:Eden = 2:1 (默认比例)
    -XX:NewRatio=1 时,Old:Eden = 1:1
    传说
    在默认的并行垃圾回收期配置下,一直使用默认配置,用户指定无效

    最大对象年龄
    -XX:MaxTenuringThreshold
    指一个对象经历多少次垃圾回收后,若依然存活,则进入老年代
    此值取值范围为 [0,15],默认 15

    查看 JVM 所有参数的实际值
    查看 JVM 所有参数的实际值

    查看 JVM 所有参数的初始值
    查看 JVM 所有参数的初始值

    查看所有命令行参数
    查看所有命令行参数

    §6 典型配置案例

    (16G 内存)
    -XX:InitialHeapSize=128m
    -XX:MaxHeapSize=4096m
    -XX:MetaspaceSize=512m
    -XX:ThreadStackSize=1m
    -XX:+PrintGCDetails
    (用于开启类指针压缩,默认开启)
    -XX:+UseCompressedOops
    -XX:+UseCompressedClassPointers
    
    -XX:-UseLargePageIndividualAllocation
    -XX:+PrintCommandLineFlags
    (垃圾回收器)
    -XX:+UseSerialGc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    高斯消元(Java实现)
    Spring 事务一些探讨
    深入Android系统基础知识及基本概念
    BLOB/TEXT column ‘sup_content‘ used in key specification without a key length
    python拟合优度R^2
    Linux环境下Docker安装mysql数据的导入和导出备份操作
    OpenWrt如何公网ssh远程连接【内网穿透】
    Django的PATH路径转换器
    【算法刷题】——美丽整数的最小增量
    分布式运用之企业级日志ELFK+logstash的过滤模块
  • 原文地址:https://blog.csdn.net/ZEUS00456/article/details/126557598