2 你说你做过 JVM 调优和参数配置,请问如果盘点查看 JVM 系统默认值?

JVM 的参数类型

  • 标配参数
    • -version
    • -help
  • X 参数(了解)
    • -Xint:解释执行
    • -Xcomp:第一次使用就编译成本地代码
    • -Xmixed:混合模式
  • XX 参数

    • Boolean 类型:-XX:+ 或者 - 某个属性值(+ 表示开启,- 表示关闭)
      • -XX:+PrintGCDetails:打印 GC 收集细节
      • -XX:-PrintGCDetails:不打印 GC 收集细节
      • -XX:+UseSerialGC:使用了串行收集器
      • -XX:-UseSerialGC:不使用了串行收集器
    • KV 设置类型:-XX:key=value
      • -XX:MetaspaceSize=128m
      • -XX:MaxTenuringThreshold=15
    • jinfo 举例,如何查看当前运行程序的配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
      public class HelloGC {
          public static void main(String[] args) {
              System.out.println("hello GC...");
              try {
                  Thread.sleep(Integer.MAX_VALUE);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
      }
      

      我们可以使用 jps -l 命令,查出进程 id

      1
      2
      3
      4
      5
      6
      
      1923 org.jetbrains.jps.cmdline.Launcher
      1988 sun.tools.jps.Jps
      1173 org.jetbrains.kotlin.daemon.KotlinCompileDaemon
      32077 com.intellij.idea.Main
      1933 com.cuzz.jvm.HelloGC
      32382 org.jetbrains.idea.maven.server.RemoteMavenServer
      

      在使用 jinfo -flag PrintGCDetails 1933 命令查看

      1
      
      -XX:-PrintGCDetails
      

      可以看出默认是不打印 GC 收集细节
      也可是使用jinfo -flags 1933 查看所以的参数

    • 两个经典参数:-Xms 和 - Xmx(如 -Xms1024m)
      • -Xms 等价于 -XX:InitialHeapSize
      • -Xmx 等价于 -XX:MaxHeapSize

盘点家底查看 JVM 默认值

  • 查看初始默认值:-XX:+PrintFlagsInitial

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    cuzz@cuzz-pc:~/Project/demo$ java -XX:+PrintFlagsInitial
    [Global flags]
         intx ActiveProcessorCount                      = -1                                  {product}
        uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
        uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
        uintx AdaptiveSizePausePolicy                   = 0                                   {product}
        uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
        uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
        uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
        uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
       ...
    
  • 查看修改更新:-XX:+PrintFlagsFinal

    1
    2
    3
    4
    5
    6
    7
    
    bool UsePSAdaptiveSurvivorSizePolicy           = true                                {product}
    bool UseParNewGC                               = false                               {product}
    bool UseParallelGC                            := true                                {product}
    bool UseParallelOldGC                          = true                                {product}
    bool UsePerfData                               = true                                {product}
    bool UsePopCountInstruction                    = true                                {product}
    bool UseRDPCForConstantTableBase               = false                               {C2 product}
    

    = 与 := 的区别是,一个是默认,一个是人物改变或者 jvm 加载时改变的参数

  • 打印命令行参数(可以看默认垃圾回收器):-XX:+PrintCommandLineFlags
    1
    2
    
    cuzz@cuzz-pc:~/Project/demo$ java -XX:+PrintCommandLineFlags
    -XX:InitialHeapSize=128789376 -XX:MaxHeapSize=2060630016 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
    

你可能感兴趣的:(JVM)