查看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給新生代

用法跟上圖配置一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM