JVM基礎參數配置簡介
標準選項(cmd下 輸入java 即可打印所有標準選項)
X選項也叫非標準選項(cmd下輸入java -X 即可打印所有非標準選項)
XX選項(cmd下輸入java -XX: PrintFlagsInitial -version,即可打印所有XX選項的默認值)
本次分享主要就是說基於HotSpot JVM平臺,講這三類JVM參數,其中還會演示一些工具平臺的使用
有時候輸出並不是以X選項的模式輸出的,而是以XX選項輸出的,值的單位一般爲KB
指定JIT編譯器模式
Java是一種解釋型語言,但隨着JIT技術的進步,它能在運行時將Java的字節碼編譯成本地代碼。以下是幾個相關的選項:
-Xint表示禁用JIT,所有字節碼都被解釋執行,這個模式的速度最慢的(字節碼->機器碼)。
-Xcomp表示所有字節碼都首先被編譯成本地代碼(即機器碼),然後再執行。
-Xmixed,默認模式,讓JIT根據程序運行的情況,有選擇地將某些代碼編譯成本地代碼。
-Xcomp和-Xmixed到底誰的速度快,針對不同的程序可能有不同的結果,基本還是推薦用默認模式。
JVM進階參數配置簡介
-XX: PrintFlagsFinal:所有XX參數的默認值
and -XX: PrintFlagsInitial 查看所有JVM參數啓動的初始值
-XX: UnlockExperimentalVMOptions
-XX: UnlockDiagnosticVMOptions
-XX: PrintCommandLineFlags 所有跟最初的默認值不同的參數及它們的值
-XX:MaxTenuringThreshold
-XX:MaxTenuringThreshold只對串行回收器和ParNew有效,對ParallGC無效。存活次數在串行和ParNew方式中可通過-XX:MaxTenuringThreshold來設置,ParallelScavenge則根據運行狀態來決定。
-XX:PretenureSizeThreshold
-XX:PretenureSizeThreshold,設置大對象直接進入年老代的閾值。-XX:PretenureSizeThreshold只對串行回收器和ParNew有效,對ParallGC無效。默認該值爲0,即不指定最大的晉升大小,一切由運行情況決定。
https://blog.csdn.net/qq_33301113/article/details/67071632
https://www.jianshu.com/p/7ab3e3a6562e
1、字符串存在永久代中,容易出現性能問題和內存溢出。
2、類及方法的信息等比較難確定其大小,因此對於永久代的大小指定比較困難,太小容易出現永久代溢出,太大則容易導致老年代溢出。
3、永久代會爲 GC 帶來不必要的複雜度,並且回收效率偏低。
4、Oracle 可能會將HotSpot 與 JRockit 合二爲一。
http://www.ityouknow.com/jvm/2017/08/29/GC-garbage-collection.html
第二,三,四的參數對於CMS的標記過程比較慢的時候可以起到一定的緩解作用
高級參數&調試工具
下面介紹一些平時不怎麼遇到的參數,以及如果出現相關的問題,可以通過JVM參數去跟蹤調試,優化
GC相關的配置,其實還不止這些,這裏再給大家介紹兩個 -Xloggc:D:/CMSgc.log,-XX: UseGCLogFileRotation(按GC日誌大小切分日誌信息)但是大多數情況下這些基本夠用
總結
以上爲內部分享部分資料,其實還有很多內容沒有說到,拋磚引玉吧https://www.jianshu.com/p/86e358afdf17https://www.cnblogs.com/aspirant/p/8663872.html
架構設計@工程設計@服務穩定性之路