zoukankan      html  css  js  c++  java
  • 查看JVM参数

    如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少?

    jps

    jinfo

    jvm的参数类型:

    1.标配参数:java -version  ,java -help , java -showversion

    2.X参数(了解): java -Xint  (解释执行), java -Xcomp(第一次使用就编译成本地代码),-Xmixed (混合模式)

    3.XX参数:

    3.1 Boolean类型 ,公式:-XX:+或者-某个属性值,其中+表示开启,-表示关闭

    例子:是否打印GC收集细节,是否使用串行垃圾回收器

    public class HelloGC {
    public static void main(String[ ]args) throws InterruptedException {
    System.out.println("***********helloGC");
    Thread.sleep(Integer.MAX_VALUE);
    }
    }

    结果见下图:

     可以进行修改

     

     3.2 KV设值类型,默认元空间大小

     默认多少极限年龄可以升养老区


    两个经典参数:-Xms 和-Xmx

    -Xms 等价于:-XX:InitialHeapSize

    -Xmx 等价于:-XX:MaxHeapSize

    -Xss  设置单个线程栈的大小,一般默认为512k~1024k,等价于 -XX:ThreadStackSize

     

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

    -XX:+PrintGCDetails  -XX:+UseSerialGC

    第一种,查看参数盘点家底

    jps

    jinfo  -flag  具体参数  java进程编号

    jinfo  -flags  java进程编号

    第二种,查看参数盘点家底

    java -XX:+PrintFlagsInitial   这个是初始的

    java -XX:+PrintFlagsFinal  这个是修改以后的      =表示没有改过    :=表示人为修改或者jvm修改过的   公式:java -XX:+PrintFlagsFinal  -version

    java -XX:+PrintCommandLineFlags  也是可以查看初始参数


     public class MemDemo {

        public static void main(String[ ] args) {
    long maxMemory = Runtime.getRuntime().maxMemory();
    long totalMemory = Runtime.getRuntime().totalMemory();
    System.out.println("-Xmx 最大分配内存 "+(maxMemory/(double)1024/1024)+"MB");
    System.out.println("-Xms 初始分配内存 "+(totalMemory/(double)1024/1024)+"MB");
    }
    }

    运行结果见下图:


     OOM异常例子:

    public class HelloGC {
    public static void main(String[ ]args) throws InterruptedException {
    System.out.println("***********helloGC");
         //创建50m大小空间,实际调整为10m
    byte[] bytes= new byte[50*1024*1024];

    }
    }

     日志分析总结:

    1.GC前后的对比。

    2.新生代占堆内存三分之一,老年代占堆内存三分之二,老年代回收不了将抛oom异常。


     常用基础参数SurvivorRatio

    -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相同

    public class HelloGC {
    public static void main(String[ ]args) throws InterruptedException {
    System.out.println("***********helloGC");
    //byte[] bytes= new byte[50*1024*1024];
    }
    }

    默认状态:8:1:1

    加参数后:4:1:1


     常用基础参数NewRatio

    -XX:NewRatio   

    配置年轻代与老年代在堆结构的占比

    -XX:NewRatio=2新生代占1,老年代2,年轻代占整个堆的1/3

    假如

    -XX:NewRatio=4新生代占1,老年代4,年轻代占整个堆的1/5

    NewRatio值就是设置老年代的占比,剩下的1给新生代

    用法跟上图配置一样。

  • 相关阅读:
    atitit,it人怎么样才容易事业成功?? 有以下五种性格的人容易成功
    atitit。win7 win8 win9 win10 win11 新特性总结与战略规划
    atitit.提升兼容性最佳实践 o9o
    atitit.attilax.com产品 软件项目通用框架类库总结
    atitit. 文件上传带进度条 atiUP 设计 java c# php
    atitit.窗体静听esc退出本窗体java swing c# .net php
    atitit.提升研发管理的利器---重型框架 框架 类库的区别
    atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
    atitit. java跟php的比较..为什么大企业喜欢java 而不是php
    atitit. java jsoup html table的读取解析 总结
  • 原文地址:https://www.cnblogs.com/liuyi13535496566/p/12173723.html
Copyright © 2011-2022 走看看