Qouson's blog Qouson's blog
首页
  • Java 基础

    • 基础
    • String
  • Java 中级

    • 网络编程
  • Java 高级

    • JVM
    • 多线程
  • Spring
  • SpringMVC
  • SpringBoot
  • MySQL
  • Redis
  • MQ
  • ZooKeeper
  • git
  • linux
  • 设计模式
  • 数据结构与算法
  • 计算机基础
  • Java相关框架
  • 分布式
  • DDD领域驱动设计
  • 系统设计
  • 杂乱无章
Java知识图谱
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

qouson

Java界的小学生
首页
  • Java 基础

    • 基础
    • String
  • Java 中级

    • 网络编程
  • Java 高级

    • JVM
    • 多线程
  • Spring
  • SpringMVC
  • SpringBoot
  • MySQL
  • Redis
  • MQ
  • ZooKeeper
  • git
  • linux
  • 设计模式
  • 数据结构与算法
  • 计算机基础
  • Java相关框架
  • 分布式
  • DDD领域驱动设计
  • 系统设计
  • 杂乱无章
Java知识图谱
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础

  • String

  • 网络编程

  • JVM

    • JVM-ERROR
    • JVM-GC
    • JVM-体系结构
    • JVM-参数和调优
      • JVM的参数类型
        • 标配参数
        • -version
        • -help
        • java -showversion
        • X参数
        • -Xlint - 解释执行
        • -Xcomp - 第一次使用就编译成本地代码
        • -Xmixed - 混合模式
        • XX参数
        • Boolean类型
        • KV设值类型
        • jinfo类型,如何查看当前运行程序的配置
        • 题外话(坑)-- -Xms和-Xmx这两个参数你怎么解释?-Xms1024m -Xmx1024m
      • 盘点家底查看JVM默认值
      • 常用的JVM基本配置
        • 基础
        • 常用参数
        • -Xms
        • -Xmx
        • -Xss
        • -Xmn
        • -XX:MetaspaceSize
        • 典型设置案例
        • -XX:PrintGCDetails
        • -XX:SurvivorRatio
        • -XX:NewRatio
        • -XX:MaxTenuringThreshold
      • !20210313234753
    • JVM-类运行机制
    • JVM
  • 多线程

  • JavaSE
  • JVM
qouson
2024-05-23
目录

JVM-参数和调优

# JVM参数和调优

# JVM的参数类型

# 标配参数

--在jdk各个版本之间稳定,很少有大变化 20210313181115

# -version

# -help

# java -showversion

# X参数

20210313181042

# -Xlint - 解释执行

# -Xcomp - 第一次使用就编译成本地代码

# -Xmixed - 混合模式

# XX参数

# Boolean类型

  • 公式
    • -XX:+或者-某个属性值(+表示开启,-表示关闭)
  • Case
    • 是否打印GC的收集细节 -- -XX:-PrintGCDetails,-XX:+PrintGCDetails
    • 是否使用串行垃圾回收器 -- -XX:-UseSerialGC,-XX:+UseSerialGC
    • 如何查看一个正在运行中的Java程序?它的某个jvm参数是否开启?具体值是多少?
      • jps -l查看进程号

      • jinfo -flag PrintGCDetails 进程号

      • demo

        • public class HelloGC {
              public static void main(String[] args) {
                  System.out.println("**************hello GC");
                  try{ TimeUnit.SECONDS.sleep(Integer.MAX_VALUE); }catch(Exception e){e.printStackTrace();}
              }
          }
          
          1
          2
          3
          4
          5
          6
        • 20210313214455

        • 20210313214613

        • 20210313215858

# KV设值类型

  • 公式
    • -XX:属性key = 属性值value
  • Case
    • -XX:MetaspaceSize=128m
    • -XX:MaxTenuringThreshold=15
    • 如何查看一个正在运行中的Java程序?它的某个jvm参数是否开启?具体值是多少?(同上Boolean类型)

# jinfo类型,如何查看当前运行程序的配置

  • 公式
    • jinfo -flag 配置项 进程号
  • Case
    • jinfo -flag InitialHeapSize 进程号 20210313221622
    • jinfo -flags 进程号 20210313221442

# 题外话(坑)-- -Xms和-Xmx这两个参数你怎么解释?-Xms1024m -Xmx1024m

  • -Xms等价于-XX:InitialHeapSize
  • -Xmx等价于-XX:MaxHeapSize

# 盘点家底查看JVM默认值

  • 第一种盘点家底查看JVM参数的方法
    • jps
    • jinfo -flag 具体参数 Java进程编号
    • jinfo -flags Java进程编号
  • 第二种盘点家底查看JVM参数的方法
    • -XX:+PrintFlagsInitial
      • 主要查看初始默认
      • 公式
        • java -XX:+PrintFlagsInitial -version
        • java -XX:+PrintFlagsInitial
      • Case
        • 20210313223124
    • -XX:+PrintFlagsFinal
      • 主要查看修改更新
      • 公式
        • java -XX:+PrintFlagsFinal -version
        • java -XX:+PrintFlagsFinal
      • Case
        • 20210313234213
        • 20210313234013
      • PrintFlagsFinal举例:运行java命令的同时打印出参数
        • 20210313235822
    • -XX:PrintCommandLineFlags
      • 打印命令行参数
      • 20210314000338

# 常用的JVM基本配置

# 基础

  • JMM-Java内存模型 20210314103757
  • Case
public class HelloGC1 {
    public static void main(String[] args) {
        //默认物理内存的1/64
        long totalMemory = Runtime.getRuntime().totalMemory();
        //默认物理内存的1/4
        long maxMemory = Runtime.getRuntime().maxMemory();
        System.out.println("TOTAL_MEMORY(-Xms) = " + totalMemory + "(字节)," + (totalMemory / (double)1024 / 1024) + "MB");
        System.out.println("MAX_MEMORY(-Xmx) = " + maxMemory + "(字节)," + (maxMemory / (double)1024 / 1024) + "MB");
    }
}
1
2
3
4
5
6
7
8
9
10

# 常用参数

# -Xms

  • 初始大小内存,默认为物理内存的1/64
  • 等价于-XX:InitialHeapSize

# -Xmx

  • 最大分配内存,默认为物理内存的1/4
  • 等价于-XX:MaxHeapSize

# -Xss

  • 设置单个线程栈的大小,一般默认为512k~1024k,依赖于操作系统平台
  • 等价于-XX:ThreadStackSize
  • Case
    • 为0代表默认参数。512k~1024k 20210314112251
    • 调整-Xss1024k 20210314112513 20210314112444
  • Java8文档说明 20210314112035

# -Xmn

  • 设置年轻代大小,一般不调整,1/3堆空间(老年代2/3堆空间)

# -XX:MetaspaceSize

  • 设置元空间大小
    • 元空间的本质和永久代类似,都是对JVM规范中方法区的实现
    • 不过元空间和永久代的最大区别是,元空间并不在虚拟机中,而是使用本地内存,因此,默认情况下,元空间的大小仅受本地内存限制
  • -Xms10m -Xmx10m -XX:MetaspaceSize=1024m -XX:+PrintFlagsFinal

# 典型设置案例

  • -Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC

# -XX:PrintGCDetails

  • 输出详细GC收集日志信息
  • GC
    • 主要YoungGC 20210314122816
  • FullGC
    • 主要OldGC Java7 PermGen -> Java8 Metaspace 20210314123127 20210314123348

# -XX:SurvivorRatio

  • 设置新生代中eden和s0/s1空间的比例
  • 默认-XX:SurvivorRatio=8,Eden:S0:S1=8:1:1
  • 假如-XX:SurvivorRatio=4,Eden:S0:S1=4:1:1,SurvivorRatio就是设置Eden区的比例占多少,S0/S1相同
  • Case:-XX:+PrintGCDetails -XX:+UseSerialGC -Xms10m -Xmx10m -XX:SurvivorRatio=8 20210314160835
  • Case:-XX:+PrintGCDetails -XX:+UseSerialGC -Xms10m -Xmx10m -XX:SurvivorRatio=4 20210314161527

# -XX:NewRatio

  • 配置年轻代与老年代在堆内存中的占比
  • 默认-XX:NewRatio=2,年轻代占1,老年代占2,年轻代占整个堆内存的1/3
  • 假如-XX:NewRatio=4,新生代占1,老年代占4,年轻代占整个堆内存的1/5,NewRatio值就是设置老年代的占比,剩下的1给新生代
  • Case:-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:NewRatio=2 20210314162842
  • Case:-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:NewRatio=4 20210314162929

# -XX:MaxTenuringThreshold

  • 设置垃圾的最大年龄,默认为15次,从yound到old
  • -XX:MaxTenuringThreshold=0
  • 设置为0,则年轻代对象不经过Survivor区,直接进入老年区。对于老年代较多的应用,可以提高效率。
  • 设置为一个较大值,则年轻代对象在Survivor进行多次复制,这样可以增加对象在年轻代的存活时间,增加年轻代被回收的概率。
  • Java8给这个参数做了限制,只能在[0,15]之间。

# 20210313234753

编辑 (opens new window)
上次更新: 2024/05/24, 11:36:46
JVM-体系结构
JVM-类运行机制

← JVM-体系结构 JVM-类运行机制→

最近更新
01
杂乱无章
12-25
02
基础-大彬
11-14
03
集合-大彬
11-14
更多文章>
Theme by Vdoing | Copyright © 2023-2025 qouson
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式