JVM參數說明&實戰

JVM基礎參數配置簡介

jvm基礎參數.png

標準選項(cmd下 輸入java 即可打印所有標準選項)
X選項也叫非標準選項(cmd下輸入java -X 即可打印所有非標準選項)
XX選項(cmd下輸入java -XX: PrintFlagsInitial -version,即可打印所有XX選項的默認值)
本次分享主要就是說基於HotSpot JVM平臺,講這三類JVM參數,其中還會演示一些工具平臺的使用

標準選項-verbose.png

JVM運行模式.png

JVM常用X選項.png

有時候輸出並不是以X選項的模式輸出的,而是以XX選項輸出的,值的單位一般爲KB

JVM編譯.png

指定JIT編譯器模式
Java是一種解釋型語言,但隨着JIT技術的進步,它能在運行時將Java的字節碼編譯成本地代碼。以下是幾個相關的選項:
-Xint表示禁用JIT,所有字節碼都被解釋執行,這個模式的速度最慢的(字節碼->機器碼)。
-Xcomp表示所有字節碼都首先被編譯成本地代碼(即機器碼),然後再執行。
-Xmixed,默認模式,讓JIT根據程序運行的情況,有選擇地將某些代碼編譯成本地代碼。
-Xcomp和-Xmixed到底誰的速度快,針對不同的程序可能有不同的結果,基本還是推薦用默認模式。

JVM進階參數配置簡介

XX選項.png

-XX: PrintFlagsFinal:所有XX參數的默認值
and -XX: PrintFlagsInitial 查看所有JVM參數啓動的初始值
-XX: UnlockExperimentalVMOptions
-XX: UnlockDiagnosticVMOptions
-XX: PrintCommandLineFlags 所有跟最初的默認值不同的參數及它們的值

堆區配置.png

-XX:MaxTenuringThreshold
-XX:MaxTenuringThreshold只對串行回收器和ParNew有效,對ParallGC無效。存活次數在串行和ParNew方式中可通過-XX:MaxTenuringThreshold來設置,ParallelScavenge則根據運行狀態來決定。
-XX:PretenureSizeThreshold
-XX:PretenureSizeThreshold,設置大對象直接進入年老代的閾值。-XX:PretenureSizeThreshold只對串行回收器和ParNew有效,對ParallGC無效。默認該值爲0,即不指定最大的晉升大小,一切由運行情況決定。

非堆配置.png

https://blog.csdn.net/qq_33301113/article/details/67071632
https://www.jianshu.com/p/7ab3e3a6562e

元空間配置.png

1、字符串存在永久代中,容易出現性能問題和內存溢出。
2、類及方法的信息等比較難確定其大小,因此對於永久代的大小指定比較困難,太小容易出現永久代溢出,太大則容易導致老年代溢出。
3、永久代會爲 GC 帶來不必要的複雜度,並且回收效率偏低。
4、Oracle 可能會將HotSpot 與 JRockit 合二爲一。

GC收集器總覽.png

GC配置.png

http://www.ityouknow.com/jvm/2017/08/29/GC-garbage-collection.html

CMS垃圾收集器配置.png

第二,三,四的參數對於CMS的標記過程比較慢的時候可以起到一定的緩解作用

G1垃圾收集器配置.png

GC打印.png

高級參數&調試工具

下面介紹一些平時不怎麼遇到的參數,以及如果出現相關的問題,可以通過JVM參數去跟蹤調試,優化

高級GC配置.png

GC相關的配置,其實還不止這些,這裏再給大家介紹兩個 -Xloggc:D:/CMSgc.log,-XX: UseGCLogFileRotation(按GC日誌大小切分日誌信息)但是大多數情況下這些基本夠用

代碼緩存.png

編譯與跟蹤.png

JVM自帶工具&調試命令.png

其他JVM工具與網站.png

總結

以上爲內部分享部分資料,其實還有很多內容沒有說到,拋磚引玉吧https://www.jianshu.com/p/86e358afdf17https://www.cnblogs.com/aspirant/p/8663872.html

架構設計@工程設計@服務穩定性之路

發佈了174 篇原創文章 · 獲贊 75 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章