一、前言
我們知道JVM引數分為自定義引數、JVM系統引數,Java main方法的引數。今天就談談怎麼使用吧。
二、檢視jvm引數定義
自定義引數我們開啟cmd視窗,輸入
java
,就能看到自定義引數的格式啦。
系統引數同樣,開啟cmd視窗輸入
java -X
就能看到系統引數相關提示啦。當然這裡只是一部分。詳細的介紹期待後續的文章更新。。。。
部分常用系統引數介紹:
引數名稱
含義
預設值
備註
-Xms
初始堆大小
物理記憶體的1/64(<1GB)
預設(MinHeapFreeRatio引數可以調整)空餘堆記憶體小於40%時,JVM就會增大堆直到-Xmx的最大限制。
-Xmx
最大堆大小
物理記憶體的1/4(<1GB)
預設(MaxHeapFreeRatio引數可以調整)空餘堆記憶體大於70%時,JVM會減少堆直到 -Xms的最小限制
-Xmn
年輕代大小
整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。
因此,不能僅增大年輕代大小,這樣會縮小持久代與年老代的大小。
-Xss
每個執行緒的堆疊大小
1M
JDK5。0以後每個執行緒堆疊大小為1M,以前每個執行緒堆疊大小為256K
-XX:+PrintGC
列印簡要GC資訊
輸出形式:[GC 118250K->113543K(130112K), 0。0094143 secs]
[Full GC 121376K->10414K(130112K), 0。0650971 secs]
一般:
XMX和XMS設定一樣大,這樣可以減輕伸縮堆大小帶來的壓力。
三、操作一把jvm系統引數
1、使用idea設定jvm引數
系統引數是以-X開頭
多個引數使用空格隔開
系統引數與自定義引數之間沒有順序要求
多個系統引數之間沒有順序要求
堆大小設定成5M,是為了觸發GC操作。預設的堆空間很大,看不到GC
2、編寫程式:
public static void main(String[] args) { System。out。println(“hello world”); }
3、看結果:
4、分析
[GC (Allocation Failure) 1024K->668K(5632K), 0。0016709 secs]
GC
:表明進行了一次垃圾回收
Allocation Failure
:表示是失敗的型別(本次引起GC的原因是因為在年輕代中沒有足夠的空間能夠儲存新的資料了。)
1024K->668K(5632K)
:表示年輕代從1024K降為668K (GC造成的)。三個引數含義:堆區垃圾回收前的大小,堆區垃圾回收後的大小,堆區總大小
0。0016709 secs
:該記憶體區域GC耗時,單位是秒
四、操作一把jvm的自定義引數
1、idea設定自定義引數
-Dcom。abao。param1=param1 -Dcom。abao。param2=param2
自定義引數是以-D開頭的
自定義引數(-D)與系統引數(-X)順序沒有要求,
自定義引數與系統引數間使用空格隔開
多個自定義引數之間沒有順序要求
2、編寫程式
public static void main(String[] args) { System。out。println(“hello world”); System。out。println(System。getProperty(“com。abao。param1”)); System。out。println(System。getProperty(“com。abao。param2”)); }
3、看結果
4、分析
使用-D形式傳入jvm引數,我們程式碼中就可以使用
System。getProperty(“com。abao。param1”)
形式取出預設值了。一般地:
五、main方法中的args怎麼搞
1、idea設定如圖:
多個引數使用空格隔開
輸入/輸出 的字串型別資料,需要其他型別需要自己轉換
2、編寫程式
public static void main(String[] args) { System。out。println(“hello world”); for (String arg : args) { System。out。println(arg); } System。out。println(System。getProperty(“com。abao。param1”)); System。out。println(System。getProperty(“com。abao。param2”)); }
3、結果
六、打了包服務,怎麼接入jvm引數,main方法的args呢
我們可以對jar包使用
java -jar
命令,同時攜帶相應引數:
格式:
java -jar jvm系統引數 jvm自定義引數 架包名字 main方法的args引數