java jvm参数获取_查看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);

}

}

结果见下图:

f445d25bdbb7c469ae4b5a97adac0e5f.png

可以进行修改

d2eb2d4864f0b360bf1a1e3d7a6aabdc.png

62ebd37f02e0b4a684a373d602c76ae3.png

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

cf8c392b033224b1ae72cf4501b147d1.png

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

f236392083bfede0989a4c8e786d2e95.png

两个经典参数:-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  也是可以查看初始参数

74902630a19640f155239152710b68bd.png

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");

}

}

运行结果见下图:

c0ffa4833199de1ff308371723ca3267.png

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];

}

}

684d53210963a3c9130e7e6947377a3f.png

0ff611604fc2668aa3d3cfb43e7e9227.png

日志分析总结:

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

5211f1f1e67492fd3e4cf46e03754b42.png

f2be42ab14006f6cb64eddefde395357.png

加参数后:4:1:1

bc3d127aaf5e2c0d1728cbf599805cbc.png

1ef86b25850833b4e5b56ed7e2c412d8.png

常用基础参数NewRatio

-XX:NewRatio

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

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

假如

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

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

用法跟上图配置一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值