作者:SimpleSmile
https://www.cnblogs.com/Simple-Object/p/10272326.html
前言
大家都知道,jvm在啟動的時候,會執行默認的一些引數,一般情況下,這些設定的默認引數應對一些平常的專案也夠用了,
但是如果專案特別大了,需要增加一下堆記憶體的大小、或者是系統老是莫明的掛掉,想查看下gc日志來排查一下錯誤的原因,都需要咱們手動設定這些引數,
各個引數介紹
1.verbose:gc
表示,啟動jvm的時候,輸出jvm里面的gc資訊,格式如下:
\[Full GC 178K->99K(1984K), 0.0253877 secs\]
解讀 :Full GC 就表示執行了一次Full GC的操作,178K 和99K 就表示執行GC前記憶體容量和執行GC后的記憶體容量,1984K就表示記憶體總容量,后面那個是執行本次GC所消耗的時間,單位是秒,
2.-XX:+printGC
這個列印的GC資訊跟上個一樣,就不做介紹了,
3.-XX:+PrintGCDetails
列印GC的詳細資訊,格式如下:
–Heap
– def new generation total 13824K, used 11223K \[0x27e80000, 0x28d80000, 0x28d80000)
– eden space 12288K, 91% used \[0x27e80000, 0x28975f20, 0x28a80000)
– from space 1536K, 0% used \[0x28a80000, 0x28a80000, 0x28c00000)
– to space 1536K, 0% used \[0x28c00000, 0x28c00000, 0x28d80000)
– tenured generation total 5120K, used 0K \[0x28d80000, 0x29280000, 0x34680000)
– the space 5120K, 0% used \[0x28d80000, 0x28d80000, 0x28d80200, 0x29280000)
– compacting perm gen total 12288K, used 142K \[0x34680000, 0x35280000, 0x38680000)
– the space 12288K, 1% used \[0x34680000, 0x346a3a90, 0x346a3c00, 0x35280000)
– ro space 10240K, 44% used \[0x38680000, 0x38af73f0, 0x38af7400, 0x39080000)
– rw space 12288K, 52% used \[0x39080000, 0x396cdd28, 0x396cde00, 0x39c80000)
解讀:new generation 就是堆記憶體里面的新生代,total的意思就是一共的,所以后面跟的就是新生代一共的記憶體大小,used也就是使用了多少記憶體大小,0x開頭的那三個分別代表的是 底邊界,當前邊界,高邊界,也就是新生代這片記憶體的起始點,當前使用到的地方和最大的記憶體地點,
eden space 這個通常被翻譯成伊甸園區,是在新生代里面的,一些創建的物件都會先被放進這里,后面那個12288K就表示伊甸園區一共的記憶體大小,91% used,很明顯,表示已經使用了百分之多少,后面的那個0x跟上一行的解釋一樣,
from space 和to space 是幸存者的兩個區,也是屬于新生代的,他兩個區的大小必須是一樣的,因為新生代的GC采用的是復制演算法,每次只會用到一個幸存區,當一個幸存區滿了的時候,把還是活的物件復制到另個幸存區,上個直接清空,這樣做就不會產生記憶體碎片了,
tenured generation 就表示老年代,
compacting perm 表示永久代,由于這兩個的格式跟前面我介紹的那個幾乎一樣,我就不必介紹了,
4.-XX:+PrintGCTimeStamps
列印GC發生的時間戳,格式如下:
289.556: \[GC \[PSYoungGen: 314113K->15937K(300928K)\] 405513K->107901K(407680K), 0.0178568 secs\] \[Times: user=0.06 sys=0.00, real=0.01 secs\]
293.271: \[GC \[PSYoungGen: 300865K->6577K(310720K)\] 392829K->108873K(417472K), 0.0176464 secs\] \[Times: user=0.06 sys=0.00, real=0.01 secs\]
解讀:289.556表示從jvm啟動到發生垃圾回收所經歷的的時間,GC表示這是新生代GC(Minor GC),PSYoungGen表示新生代使用的是多執行緒垃圾回收器Parallel Scavenge,314113K->15937K(300928K)]這個跟上面那個GC格式一樣,
只不過,這個是表示的是新生代,幸存者區,后面那個是整個堆的大小,GC前和GC后的情況,Times這個顯而易見,代表GC的所消耗的時間,用戶垃圾回收的時間和系統消耗的時間和最終真實的消耗時間,
5.-X:loggc:log/gc.log
這個就表示,指定輸出gc.log的檔案位置,(我這里寫的log/gc.log就表示在當前log的目錄里,把GC日志寫到叫gc.log的檔案里,)
6.-XX:+PrintHeapAtGC
表示每次GC后,都列印堆的資訊,(這個列印的基本格式跟上面第二條的基本類似,我也就不比多說了,)
7.-XX:+TraceClassLoading
監控類的加載,格式如下:
?\[Loaded java.lang.Object from shared objects file\]
?\[Loaded java.io.Serializable from shared objects file\]
?\[Loaded java.lang.Comparable from shared objects file\]
?\[Loaded java.lang.CharSequence from shared objects file\]
?\[Loaded java.lang.String from shared objects file\]
?\[Loaded java.lang.reflect.GenericDeclaration from shared objects file\]
?\[Loaded java.lang.reflect.Type from shared objects file\]
使用這個引數就能很清楚的看到那些類被加載的情況了,
8.-XX:+PrintClassHistogram
跟蹤引數,這個按下Ctrl+Break后,就會列印一下資訊:
num #instances #bytes class name
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
1: 890617 470266000 \[B
2: 890643 21375432 java.util.HashMap$Node
3: 890608 14249728 java.lang.Long
4: 13 8389712 \[Ljava.util.HashMap$Node;
5: 2062 371680 \[C
6: 463 41904 java.lang.Class
分別顯示:序號、實體數量、總大小、型別,
這里面那個型別,B和C的其實就是byte和char型別,
9.-Xmx -Xms
這個就表示設定堆記憶體的最大值和最小值,這個設定了最大值和最小值后,jvm啟動后,并不會直接讓堆記憶體就擴大到指定的最大數值,而是會先開辟指定的最小堆記憶體,如果經過數次GC后,還不能,滿足程式的運行,才會逐漸的擴容堆的大小,但也不是直接擴大到最大記憶體,
10.-Xmn
設定新生代的記憶體大小,
11.-XX:NewRatio
新生代和老年代的比例,比如:1:4,就是新生代占五分之一,
12.-XX:SurvivorRatio
設定兩個Survivor區和eden區的比例,比如:2:8 ,就是一個Survivor區占十分之一,
13.-XX:+HeapDumpOnOutMemoryError
發生OOM時,匯出堆的資訊到檔案,
14.-XX:+HeapDumpPath
表示,匯出堆資訊的檔案路徑,
15.-XX:OnOutOfMemoryError
當系統產生OOM時,執行一個指定的腳本,這個腳本可以是任意功能的,比如生成當前執行緒的dump檔案,或者是發送郵件和重啟系統,
16.-XX:PermSize -XX:MaxPermSize
設定永久區的記憶體大小和最大值,永久區記憶體用光也會導致OOM的發生,
17.-Xss
設定堆疊的大小,堆疊都是每個執行緒獨有一個,所有一般都是幾百k的大小,
你還知道哪些比較重要的?歡迎留言哈~
最后分享一套 JVM 干貨,長達 46 頁,從JVM體系結構概述、GC演算法、Hotspot記憶體管理、Hotspot垃圾回收器、調優和監控工具六大方面進行講述,
獲取這套資料請關注Java技術堆疊微信公眾號,在后臺回復"JVM46" 即可獲取完整版,干貨滿滿,
推薦去我的博客閱讀更多:
1.Java JVM、集合、多執行緒、新特性系列教程
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
4.Java、后端、架構、阿里巴巴等大廠最新面試題
覺得不錯,別忘了點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/186830.html
標籤:Java
下一篇:org.apache.jasper.JasperException: java.lang.NullPointerException
