美文网首页
[JVM面试]你说你做过 JVM 调优和参数配置,请问如果盘点查

[JVM面试]你说你做过 JVM 调优和参数配置,请问如果盘点查

作者: Coder编程 | 来源:发表于2020-04-28 21:40 被阅读0次

    每日一篇,不做curd工程师

    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 举例,如何查看当前运行程序的配置

          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`
    
            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 命令查看

            -XX:-PrintGCDetails
    

    可以看出默认是不打印 GC 收集细节
    也可是使用jinfo -flags 1933 查看所以的参数
    两个经典参数:-Xms 和 - Xmx(如 -Xms1024m)

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

    盘点家底查看 JVM 默认值

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

        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

        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

       cuzz@cuzz-pc:~/Project/demo$ java -XX:+PrintCommandLineFlags
       -XX:InitialHeapSize=128789376 -XX:MaxHeapSize=2060630016 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
    

    相关文章

      网友评论

          本文标题:[JVM面试]你说你做过 JVM 调优和参数配置,请问如果盘点查

          本文链接:https://www.haomeiwen.com/subject/licbwhtx.html