[JVM教程與調優] 什麼是JVM運行時參數?

什麼是JVM運行時參數?

咱們接着上一章節[JVM教程與調優] JVM都有哪些參數類型?的內容繼續講解,這章咱們來介紹一下:如何查看JVM運行時參數。這一點十分重要,由於咱們在進行JVM參數調優的時候,咱們首先得知道目前系統運行的值是什麼,而後相應的根據相關參數進行調優。html

1.-XX:+PrintFlagsInitial(查看初始值) 2.-XX:+PrinFlagsFinal(查看最終值) 3.-XX:+UnlockExperimentalVMOptions(解鎖實驗參數) 4.-XX:+UnlockDiagnosticVMOptions(解鎖診斷參數) 5.-XX:+PrintCommandLineFlags(打印命令行參數)java

PrinFlagsFinal

示例一

bool類型 屬性名:UseG1GC 值:false 所以能夠看出,並無使用G1GC。git

示例二

InitialHeapSize := 130023424 表示初始堆的值大小。github

注意: =表示默認值 :=被用戶或者JVM修改後的值tomcat

演示一下

演示

能夠看到有很是多的參數。有興趣的小夥伴能夠本身試試。微信

那麼剛纔咱們看到的參數是哪一個進程的呢? 答案是:經過執行java -XX:+PrinFlagsFinal -version這個命令時的進程參數值。oracle

若是咱們要查看一個在運行時的JVM參數值,那麼如何查看呢?這就是咱們後面講到的jinfo,在此以前,咱們先來看一下·jps·。學習

jps

jps它就相似於Linux系統中的ps,也是用來查看系統進程的。不過它是專門用來查看java的進程。接下來咱們來簡單演示一下jps的使用spa

如何使用?

jps使用

更多jps的適用參數命令,能夠去這裏查看 命令行

jps的命令使用地址

jinfo

那麼咱們如何去查看一個正在運行的JVM的參數值呢? 那麼用jinfo就能夠了。

jinfo使用

再例如,咱們如何查看tomcat的最大內存值是多少?那麼咱們首先得知道命令,而後找到對應的pid。

jinfo使用舉例

如圖,其中23789就是tomcat的進程pid,查看對內存大小命令:MaxHeapSize。 能夠看到最大堆內存大小爲268435456

jinfo使用舉例2

能夠看到咱們手動賦值的參數,也能夠看到默認有的參數值。

  • 查看最大內存

查看最大內存

  • 查看垃圾回收器

查看垃圾回收器

jstat查看JVM統計信息

  • 類裝載
  • 垃圾收集
  • JIT編譯

垃圾回收這塊很是有用,由於咱們可以很是清楚的看到內存結構裏面每一塊的大小是如何進行變化的。

命令格式

命令格式

options:-class,-compiler,-gc,-printcompilation

咱們來查看一下jstat文檔。

jstat文檔

咱們來介紹一下幾個命令。

類裝載

類裝載命令演示

jstat -class 3176 1000 10

後面的1000表示每隔1000ms,10表示一共輸出10次

咱們來看一下文檔中是如何介紹-class命令。

-class命令

分別表示什麼含義呢?

  • Loaded:類裝載的個數
  • Bytes:裝載的kBs數
  • Unloaded:卸載的個數
  • Bytes:卸載的kBs數
  • Time:所花費的裝載和卸載的時間

垃圾收集

命令:-gc、-gcutil、-gccause、-gcnew、-gcold

垃圾收集

輸入:jstat -gc 3176 1000 3

一樣,後面表示每隔1000ms,一共打印輸出3次

咱們一樣來看一下文檔中的-gc的命令

-gc命令

咱們來總結一下-gc輸出結果。

  • S0C、S1C、S0U、S1U:S0和S1的總量與使用量
  • EC、EU:Eden區總量與使用量
  • OC、OU:Old區總量與使用量
  • MC、MU:Metaspace區總量與使用量
  • CCSC、CCSU:壓縮類空間總量與使用量
  • YGC、YGCT:YoungGC的次數與時間
  • FGC、FGCT:FullGC的次數與時間
  • GCT:總的GC時間

JIT編譯

命令:-compiler、-printcompilation

咱們來演示一下JIT編譯。

JIT編譯演示

這些都表示什麼含義呢?咱們來看一下咱們的文檔。

JIT命令文檔

  • Compiled:表示完成了多少個編譯任務
  • Failed:表示失敗的編譯任務個數
  • Invalid:表示無效的編譯任務
  • Time:執行編譯任務所花的時間。
  • FailedType:上次失敗編譯的編譯類型。
  • FailedMethod:上次編譯失敗的類名和方法。

小夥伴能夠結合一下上方的演示圖案,來理解一下是什麼含義。

你們瞭解一下就能夠,實際工做中做用並非很大。

以上都是以JDK1.8進行介紹。這裏小夥伴們先簡單瞭解一下這一塊,後續再詳細介紹。小夥伴們能夠本身在電腦上嘗試一下使用命令,觀察一下打印結果。 關於JVM參數的命令,在文檔中還有更多的詳細介紹。感興趣的小夥伴,能夠自行去查看。 傳送門:docs.oracle.com/javase/8/do…

下一章,咱們未來學習一下JVM的內存結構以及內存溢出。感興趣的小夥伴,能夠關注一下~

推薦

文末

文章收錄至 Github: github.com/CoderMerlin… Gitee: gitee.com/573059382/c… 歡迎關注並star~

微信公衆號
相關文章
相關標籤/搜索