深入理解jvm啟動參數(shù)
寫在前面
本文一起看下jvm啟動參數(shù)相關(guān)內(nèi)容,通過本文希望我自己也希望大家能夠真正的應(yīng)用到實際的工作中。
1:基本內(nèi)容介紹
一般我們啟動java程序有兩種方式,一種是直接運行一個有main函數(shù)的class,第二種是運行一個在MANIFEST文件中指定了main類的jar包,格式分別如下:
class文件格式: java [options] classname [args] jar包格式: java [options] jarfilename [args]
其中[options]就是我們本文要分析的jvm的參數(shù)配置,[args]是main函數(shù)的參數(shù)即main(String[] arags)中的args
參數(shù)具體可以分為標(biāo)準(zhǔn)參數(shù),非標(biāo)準(zhǔn)參數(shù),系統(tǒng)屬性參數(shù)等,分別來看下。
標(biāo)準(zhǔn)參數(shù)
標(biāo)準(zhǔn)參數(shù)是以-開頭的參數(shù),這種參數(shù)是所有的JVM都會實現(xiàn)和支持的,并且會一直兼容,如-server 設(shè)置jvm的運行模式。
系統(tǒng)屬性參數(shù)
系統(tǒng)屬性參數(shù)通過-D設(shè)置,如-Dfile.encoding=UTF-8,設(shè)置編碼。
非標(biāo)準(zhǔn)參數(shù)
非標(biāo)準(zhǔn)參數(shù)通過 -X 設(shè)置,這種參數(shù)并不保證所有JVM的都支持,并且不保證向后兼容,如 -Xms2g -Xmx4g,可以通過java -X查看當(dāng)前jvm支持非標(biāo)準(zhǔn)參數(shù)都有哪些,如下:
bogon:~ xb$ java -version java version "9.0.4" Java(TM) SE Runtime Environment (build 9.0.4+11) Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode) bogon:~ xb$ java -X -Xbatch 禁用后臺編譯 -Xbootclasspath/a:<directories and zip/jar files separated by :> 附加在引導(dǎo)類路徑末尾 -Xcheck:jni 對 JNI 函數(shù)執(zhí)行其他檢查 -Xcomp 在首次調(diào)用時強制編譯方法 -Xdebug 為實現(xiàn)向后兼容而提供 -Xdiag 顯示附加診斷消息 -Xfuture 啟用最嚴格的檢查, 預(yù)期將來的默認值 -Xint 僅解釋模式執(zhí)行 -Xinternalversion 顯示比 -version 選項更詳細的 JVM 版本信息 ...
非穩(wěn)定參數(shù)
非穩(wěn)定參數(shù)通過 -XX:
開頭,其和具體的jvm有關(guān),且隨時可能隨時在下一個版本中刪除,具體使用在如下兩種形式其中一種,如下:
-XX:+-flag 打開某布爾的開關(guān),如-XX:+UseG1GC設(shè)置使用G1 GC。 -XX:key=value 通過kv的形式設(shè)置值,如-XX:MaxPermSize=256m,設(shè)置方法區(qū)大小為256m
2:參數(shù)分類
按照參數(shù)設(shè)置的內(nèi)容可以分為如下6類,分別看下。
2.1:系統(tǒng)屬性參數(shù)
系統(tǒng)屬性參數(shù)首先我們可以在操作系統(tǒng)級別設(shè)置,如果是windows則是在如下界面設(shè)置:
如果是Linux則可以在 /etc/profile
等文件中配置,但是這種方式配置的是全局的,對所有的進程生效,另外一種就是通過 -D:k=v 設(shè)置進程的屬性,如 -Dmaven.test.skip.true
, -Dfile.encoding=UTF-8
,當(dāng)然也可以通過System.setProperty來設(shè)置,如下測試:
2.2:內(nèi)存大小參數(shù)
為了方便對應(yīng)到具體的內(nèi)存區(qū)域,我們先來看下jvm的內(nèi)存結(jié)構(gòu),如下圖:
先看下主要參數(shù):
-Xms 設(shè)置堆內(nèi)存的初始大小,即最小內(nèi)存 -Xmx 設(shè)置堆的最大大小,一般-Xms和-Xmx設(shè)置為一樣,這樣可以避免堆內(nèi)存擴容帶來的性能抖動 -Xms 設(shè)置堆的young區(qū)的大小 -XX:MaxDirectMemorySize=size 設(shè)置可以使用的最大堆外內(nèi)存,即操作系統(tǒng)的內(nèi)存,效果同-Dsun.nio.MaxDirectoryMemorySize=size -Xss 設(shè)置線程棧的大小,影響棧的深度,如-Xss1m,即設(shè)置線程棧的大小為1M,效果同-XX:ThreadStackSize=size
這些參數(shù)和jvm內(nèi)存結(jié)構(gòu)關(guān)系如下圖:
2.3:GC相關(guān)參數(shù)
主要是設(shè)置使用何種類型的垃圾收集器,如下:
-XX:+UseG1GC 使用G1垃圾收集器 -XX:+UseConcMarkSweepGC 使用CMS垃圾收集器 -XX:+UseSerialGC 使用串行垃圾收集器 -XX:+UseParallelGC 使用并行垃圾收集器
2.4:分析診斷相關(guān)相關(guān)參數(shù)
-XX:+HeapDumpOnOutOfMemoryError 當(dāng)發(fā)生OutOfMemoryError時,自動dump堆內(nèi)存 如,java -XX:+HeapDumpOnOutOfMemoryError -Xmx256m SomeJavaFile -XX:+HeapDumpPath 與-XX:HeapDumpOnOutOfMemoryError 配合使用,設(shè)置發(fā)生了OOM后生成dump文件路徑,如果是沒有指定則默認為啟動java程序的工作目錄 如,java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local -Xmx256m SomeJavaFile -XX:OnOutOfMemoryError 拋出OutOfMemoryError錯誤時執(zhí)行的腳本 -XX:ErrorFile=filename 致命錯誤的日志文件名稱,絕對路徑或者相對路徑
2.5:javaagent
TODO 學(xué)習(xí)后補充!??!
到此這篇關(guān)于深入理解jvm啟動參數(shù)的文章就介紹到這了,更多相關(guān)jvm啟動參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用maven構(gòu)建java9 service實例詳解
本篇文章主要介紹了使用maven構(gòu)建java9 service實例詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02java中PreparedStatement和Statement詳細講解
這篇文章主要介紹了java中PreparedStatement和Statement詳細講解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Spring?Cloud?Loadbalancer服務(wù)均衡負載器詳解
這篇文章主要介紹了Spring?Cloud?Loadbalancer服務(wù)均衡負載器,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03解決Mybatis出現(xiàn)報錯Error querying database.Cause: j
這篇文章主要介紹了解決Mybatis出現(xiàn)報錯Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05SpringCloud Sleuth實現(xiàn)分布式請求鏈路跟蹤流程詳解
這篇文章主要介紹了SpringCloud Sleuth實現(xiàn)分布式請求鏈路跟蹤流程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11關(guān)于dubbo的RPC和RESTful性能及對比
這篇文章主要介紹了關(guān)于dubbo的RPC和RESTful性能及對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12