JVM引數、main方法的args引數使用

一、前言

我們知道JVM引數分為自定義引數、JVM系統引數,Java main方法的引數。今天就談談怎麼使用吧。

二、檢視jvm引數定義

自定義引數我們開啟cmd視窗,輸入

java

,就能看到自定義引數的格式啦。

JVM引數、main方法的args引數使用

系統引數同樣,開啟cmd視窗輸入

java -X

就能看到系統引數相關提示啦。當然這裡只是一部分。詳細的介紹期待後續的文章更新。。。。

JVM引數、main方法的args引數使用

部分常用系統引數介紹:

引數名稱

含義

預設值

備註

-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

JVM引數、main方法的args引數使用

2、編寫程式:

public static void main(String[] args) {        System。out。println(“hello world”);   }

3、看結果:

JVM引數、main方法的args引數使用

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)順序沒有要求,

自定義引數與系統引數間使用空格隔開

多個自定義引數之間沒有順序要求

JVM引數、main方法的args引數使用

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、看結果

JVM引數、main方法的args引數使用

4、分析

使用-D形式傳入jvm引數,我們程式碼中就可以使用

System。getProperty(“com。abao。param1”)

形式取出預設值了。一般地:

五、main方法中的args怎麼搞

1、idea設定如圖:

多個引數使用空格隔開

輸入/輸出 的字串型別資料,需要其他型別需要自己轉換

JVM引數、main方法的args引數使用

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引數使用

六、打了包服務,怎麼接入jvm引數,main方法的args呢

我們可以對jar包使用

java -jar

命令,同時攜帶相應引數:

格式:

java -jar jvm系統引數 jvm自定義引數 架包名字 main方法的args引數

JVM引數、main方法的args引數使用