最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JVM性能調(diào)優(yōu)之運行時參數(shù)小結(jié)

 更新時間:2024年04月11日 09:48:57   作者:布道師小羊  
jvm是java的運行環(huán)境,在jvm中有很多的參數(shù)可以進行設(shè)置,本文主要介紹了JVM性能調(diào)優(yōu)之運行時參數(shù)小結(jié),具有一定的參考價值,感興趣的可以了解一下

熟悉JVM參數(shù)對于系統(tǒng)調(diào)優(yōu)是非常重要的。比如一個高流量的延遲的電子交易平臺,它要求的響應(yīng)時間都是毫秒級的。要獲得適合的參數(shù)組合需要大量的分析和不斷地嘗試,更依賴交易系統(tǒng)的特性。

本帖將主要講解JVM的運行時參數(shù)的分類及其使用方式。

1、JVM參數(shù)選項類型

JVM參數(shù)總體上來說分為三大類,分別是標準參數(shù)選項、非標準參數(shù)選項和非穩(wěn)定參數(shù)選項,下面分別詳細介紹三大參數(shù)類型。

1.1、標準參數(shù)選項

所有的JVM都必須實現(xiàn)標準參數(shù)的功能,而且向后兼容。標準參數(shù)是相對比較穩(wěn)定的參數(shù),后續(xù)版本基本不會發(fā)生變化,參數(shù)以“-”開頭,例如大家常見的“-version”參數(shù)就是標準參數(shù)。獲取標準參數(shù)的命令是在終端輸入“java”或者“java -help”命令即可,獲取結(jié)果如下表所示:

在這里插入圖片描述

需要注意的是HotSpot虛擬機的兩種模式,分別是Server和Client,分別通過-server和-client模式設(shè)置。

在32位Windows系統(tǒng)上,默認使用Client類型的JVM。要想使用Server模式,則機器配置至少有2個以上的CPU和2GB以上的物理內(nèi)存。Client模式適用于對內(nèi)存要求較小的桌面應(yīng)用程序,默認使用Serial串行垃圾收集器。

64位機器上只支持Server模式的JVM,適用于需要大內(nèi)存的應(yīng)用程序,默認使用并行垃圾收集器。

1.2、非標準參數(shù)選項

我們知道JVM可以有不同的生產(chǎn)廠商,非標準參數(shù)的意思是并不保證所有JVM都對非標準參數(shù)進行實現(xiàn),即只能被部分JVM識別且不保證向后兼容,功能相對來說也是比較穩(wěn)定的,但是后續(xù)版本有可能會變更,參數(shù)以“-X”開頭??梢杂胘ava -X來檢索非標準參數(shù),不能保證所有參數(shù)都可以被檢索出來,例如其中就沒有-Xcomp。下表列出了常見的非標準參數(shù)。

在這里插入圖片描述

特別注意的是-Xint參數(shù)表示禁用JIT,所有的字節(jié)碼都被解釋執(zhí)行,這個模式下系統(tǒng)啟動最快,但是執(zhí)行效率最低。-Xcomp表示JVM采用編譯模式,代碼執(zhí)行很快,但是啟動會比較慢。-Xmixed表示JVM采用混合模式,啟動速度較快,讓JIT根據(jù)程序運行的情況,對熱點代碼實行檢測和編譯。

雖然-Xms、-Xmx和-Xss三個參數(shù)歸屬于-X參數(shù)選項,但是這三個參數(shù)的執(zhí)行效果分別等同于非穩(wěn)定參數(shù)中的-XX:InitialHeapSize、-XX:MaxHeapSize和-XX:ThreadStackSize。

1.3、非穩(wěn)定參數(shù)選項

非穩(wěn)定參數(shù)選項以-XX開頭,也屬于非標準參數(shù),相對不穩(wěn)定,在JVM中是不健壯的,也可能會突然直接取消某項參數(shù),主要用于JVM調(diào)優(yōu)和調(diào)試。但是這些參數(shù)中有很多參數(shù)對于JVM調(diào)優(yōu)很有用處,所以也是使用最多的參數(shù)選項。

-XX參數(shù)又分為布爾類型參數(shù)和非布爾類型參數(shù)。布爾類型的格式為-XX:+/-,-XX:+表示啟用option,-XX:-表示禁用option。例如-XX:+UseParallelGC表示開啟ParallelGC垃圾收集器,-XX:-UseParallelGC表示關(guān)閉ParallelGC垃圾收集器,有些參數(shù)是默認開啟的,調(diào)優(yōu)的時候可以考慮關(guān)閉某些參數(shù)。

非布爾類型的參數(shù)也可以理解為Key-Value型的參數(shù),可以分為數(shù)值類型和非數(shù)值類型。數(shù)值類型格式為-XX:=,number可以帶上單位(k、K表示千字節(jié),m、M表示兆,或者使用更大的內(nèi)存單位g、G),例如-XX:NewSize=1024m表示設(shè)置新生代初始大小為1024MB。非數(shù)值類型格式為-XX:=,例如-XX:HeapDumpPath=/usr/local/heapdump.hprof用來指定heap轉(zhuǎn)存文件的存儲路徑。

通過“java -XX:+PrintFlagsFinal”命令可以查看所有的-XX參數(shù),如下圖所示,篇幅原因截取部分截圖。

在這里插入圖片描述

上圖最后一列參數(shù)的取值有多種,如下所示:

  • (1)product表示該類型參數(shù)是官方支持的,屬于JVM內(nèi)部選項。
  • (2)rw表示可動態(tài)寫入。
  • (3)C1表示Client JIT編譯器。
  • (4)C2表示Server JIT編譯器。
  • (5)pd表示平臺獨立。
  • (6)lp64表示僅支持64位JVM。
  • (7)manageable表示可以運行時修改。
  • (8)diagnostic表示用于JVM調(diào)試。
  • (9)experimental表示非官方支持的參數(shù)。

默認不包含diagnostic和experimental兩種類型,想要包含該類型的參數(shù)可以配合參數(shù)-XX:+UnlockDiagnosticVMOptions和-XX:+UnlockExperimentalVMOptions使用,例如java-XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions命令結(jié)果如下(部分結(jié)果),包含了diagnostic類型的參數(shù)。同理可以添加-XX:+UnlockExperimentalVMOptions參數(shù)用于包含experimental類型的參數(shù),不再演示。

在這里插入圖片描述

2、添加JVM參數(shù)的方式

在工作中經(jīng)常需要配置JVM參數(shù),一般有以下幾種方式:

2.1、IDEA界面配置

鼠標右鍵選中目標工程,選擇“Run”→“Edit Configurations”選項,選中要添加JVM參數(shù)的Application,然后在Configuration里面的VM options中輸入想要添加的JVM參數(shù)即可,如下圖所示,例如填入-Xmx256m,這樣就可以設(shè)置運行時最大內(nèi)存為256MB。

在這里插入圖片描述

2.2、通過java命令配置

通過java命令運行class或者jar包的時候也可以添加JVM參數(shù),一般多用于工程測試,如下所示:

     //運行jar包時添加JVM參數(shù)
     java -Xms128m -Xmx256m -jar demo.jar
     //運行類的字節(jié)碼文件時添加JVM參數(shù)
     java -Xms128m -Xmx256m 類名

2.3、通過web服務(wù)器配置

Linux系統(tǒng)下可以在tomcat/bin/catalina.sh中添加如下JVM配置。

JAVA_OPTS="-Xms512M -Xmx1024M"

Windows系統(tǒng)下可以在catalina.bat中添加如下配置。

set"JAVA_OPTS=-Xms512M -Xmx1024M"

2.4、通過jinfo命令配置

3、常用JVM參數(shù)選項

JVM參數(shù)選項那么多,在工作中有很多參數(shù)是很少用到的,這里匯總了幾大常用的參數(shù)分類,如下所示:

(1)輸出設(shè)置的-XX參數(shù)以及參數(shù)值的參數(shù)選項如下表所示:

在這里插入圖片描述

(2)堆、棧、方法區(qū)等內(nèi)存大小設(shè)置的參數(shù)選項如下表所示:

在這里插入圖片描述

(3)OutOfMemory相關(guān)的參數(shù)選項如下表所示:

在這里插入圖片描述

-XX:OnOutOfMemoryError表示當發(fā)生內(nèi)存溢出的時候,還可以讓JVM調(diào)用任一個shell腳本。大多數(shù)時候,內(nèi)存溢出并不會導(dǎo)致整個應(yīng)用都掛掉,但是最好還是把應(yīng)用重啟一下,因為一旦發(fā)生了內(nèi)存溢出,可能會讓應(yīng)用處于一種不穩(wěn)定的狀態(tài),一個不穩(wěn)定的應(yīng)用可能會提供錯誤的響應(yīng)。例如使用以下命令:

-XX:OnOutOfMemoryError=/opt/Server/restart.sh

當給JVM傳遞上述參數(shù)的時候,如果發(fā)生了內(nèi)存溢出,JVM會調(diào)用/opt/Server/restart.sh這個腳本,在這個腳本中可以去用優(yōu)雅的辦法來重啟應(yīng)用。restart.sh腳本如下所示。

在這里插入圖片描述

(4)垃圾收集器相關(guān)的參數(shù)選項因垃圾收集器的不同而不同,關(guān)于垃圾收集器的分類以及配合使用。使用-XX:+PrintCommandLineFlags查看命令行相關(guān)參數(shù),從中可以查看到當前系統(tǒng)使用的垃圾收集器,也可以使用命令行指令jinfo查看。

Serial收集器作為HotSpot中Client模式下的默認新生代垃圾收集器。Serial Old收集器是運行在Client模式下默認的老年代的垃圾收集器。-XX:+UseSerialGC參數(shù)可以指定新生代和老年代都使用串行收集器,表示新生代用Serial GC,且老年代用Serial Old收集器??梢垣@得最高的單線程收集效率?,F(xiàn)在已經(jīng)很少使用Serial收集器了。

ParNew收集器可以使用-XX:+UseParNewGC參數(shù)指定。它表示新生代使用并行收集器,不影響老年代。Parallel收集器的相關(guān)JVM參數(shù)選項如下表:

在這里插入圖片描述

CMS收集器的相關(guān)JVM參數(shù)選項如下表所示:

在這里插入圖片描述

需要注意的是JDK 9新特性中CMS被標記為Deprecate了,如果對JDK 9及以上版本的HotSpot虛擬機使用參數(shù)-XX:+UseConcMarkSweepGC來開啟CMS收集器的話,用戶會收到一個警告信息,提示CMS未來將會被廢棄。JDK 14新特性中刪除了CMS垃圾收集器,如果在JDK 14中使用-XX:+UseConcMarkSweepGC的話,JVM不會報錯,只是給出一個warning信息,但是不會exit。JVM會自動回退以默認GC方式啟動JVM。

G1收集器的相關(guān)JVM參數(shù)選項如下表所示:

在這里插入圖片描述

G1收集器主要涉及Mixed GC,Mixed GC會回收新生代和部分老年代,G1關(guān)于Mixed GC調(diào)優(yōu)常用參數(shù)選項如下表所示:

在這里插入圖片描述

(5)GC日志相關(guān)的參數(shù)選項如下表所示:

在這里插入圖片描述

(6)其他常用的參數(shù)選項如下表所示:

在這里插入圖片描述

4、通過Java代碼獲取JVM參數(shù)

Java提供了java.lang.management包用于監(jiān)視和管理JVM和Java運行時中的其他組件,它允許本地和遠程監(jiān)控和管理運行的JVM,會經(jīng)常使用到其中的ManagementFactory類。另外還有Runtime類也可以獲取一些內(nèi)存、CPU核數(shù)等相關(guān)的數(shù)據(jù)。通過這些API可以監(jiān)控我們的應(yīng)用服務(wù)器的堆內(nèi)存使用情況,也可以設(shè)置一些閾值進行報警等處理,代碼清單如下演示了Java代碼獲取應(yīng)用的內(nèi)存使用情況:

在這里插入圖片描述

運行結(jié)果如下,可以看到堆內(nèi)存的各項信息:

在這里插入圖片描述

5、小結(jié)

講解了JVM運行時參數(shù),JVM參數(shù)對于系統(tǒng)調(diào)優(yōu)是非常重要的,參數(shù)分為三類,分別是標準參數(shù)選項、非標準參數(shù)選項和非穩(wěn)定參數(shù)選項。標準參數(shù)是所有的JVM實現(xiàn)都必須要實現(xiàn)的參數(shù),不同的JVM擁有相同的參數(shù)功能。非標準參數(shù)無法保證所有的JVM都會有對應(yīng)的實現(xiàn),該類型參數(shù)一般以“-X”開頭。非穩(wěn)定參數(shù)在JVM中是不健壯的,屬于試驗性質(zhì)的參數(shù),有可能在不同的JVM版本中會被取消,該類型參數(shù)一般以“-XX”開頭,對于JVM調(diào)優(yōu)有很大的用處。

到此這篇關(guān)于JVM性能調(diào)優(yōu)之運行時參數(shù)小結(jié)的文章就介紹到這了,更多相關(guān)JVM 運行時參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring Boot 中實現(xiàn)定時任務(wù)的兩種方式

    詳解Spring Boot 中實現(xiàn)定時任務(wù)的兩種方式

    這篇文章主要介紹了Spring Boot 中實現(xiàn)定時任務(wù)的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java 如何使用正則表達式去除前導(dǎo)0

    Java 如何使用正則表達式去除前導(dǎo)0

    這篇文章主要介紹了Java 使用正則表達式去除前導(dǎo)0的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Spring整合Mybatis實操分享

    Spring整合Mybatis實操分享

    這篇文章主要介紹了Spring整合Mybatis實操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-04-04
  • Java中左移和右移問題圖文詳解

    Java中左移和右移問題圖文詳解

    左移和右移并不常用,在一些特殊情況下才會使用,比如加解密時,會大量用到,這篇文章主要給大家介紹了關(guān)于Java中左移和右移問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • SpringBoot集成Dubbo啟用gRPC協(xié)議

    SpringBoot集成Dubbo啟用gRPC協(xié)議

    這篇文章主要介紹了SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫過程中的區(qū)別。感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • Spring啟動指定時區(qū)的兩種方法

    Spring啟動指定時區(qū)的兩種方法

    最近項目啟動,時間要修改成東七區(qū)時間,本文主要介紹了Spring啟動指定時區(qū)的兩種方法,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java-IO流實驗

    Java-IO流實驗

    流是一種抽象概念,它代表了數(shù)據(jù)的無結(jié)構(gòu)化傳遞。。用來進行輸入輸出操作的流就稱為IO流。換句話說,IO流就是以流的方式進行輸入輸出,希望能給您帶來幫助
    2021-06-06
  • SpringBoot+WebSocket實現(xiàn)IM及時通訊的代碼示例

    SpringBoot+WebSocket實現(xiàn)IM及時通訊的代碼示例

    項目中碰到需要及時通訊的場景,使用springboot集成websocket,即可實現(xiàn)簡單的及時通訊,本文介紹springboot如何集成websocket、IM及時通訊需要哪些模塊、開發(fā)和部署過程中遇到的問題、以及實現(xiàn)小型IM及時通訊的代碼,需要的朋友可以參考下
    2023-10-10
  • Java實現(xiàn)ArrayList排序的方法詳解

    Java實現(xiàn)ArrayList排序的方法詳解

    Java中常見的ArrayList排序方法主要為三種:JDK8的stream、Comparator#compare()和Comparable#compareTo(),本文將詳解這三者的使用,需要的可以參考一下
    2022-05-05
  • 推薦幾款非常實用的IDEA插件小結(jié)

    推薦幾款非常實用的IDEA插件小結(jié)

    這篇文章主要介紹了推薦幾款非常實用的IDEA插件小結(jié),解決你開發(fā)中可望而又不好找的插件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論

马公市| 伊春市| 和静县| 米泉市| 政和县| 康定县| 崇信县| 奉贤区| 获嘉县| 威海市| 太和县| 将乐县| 闻喜县| 乌兰察布市| 新平| 盘山县| 宜兰县| 罗城| 西畴县| 汤阴县| 三河市| 皮山县| 灌阳县| 鄂尔多斯市| 喜德县| 武穴市| 探索| 荣昌县| 铁力市| 天柱县| 漯河市| 顺义区| 东兰县| 长治市| 渑池县| 静宁县| 尚志市| 仙桃市| 丹凤县| 达拉特旗| 西畴县|