程序員都應(yīng)該知道的JVM參數(shù)
掃描二維碼
隨時隨地手機(jī)看文章
Trace跟蹤參數(shù)
1.-verbose:gc
2.-XX:+printGC
可以打印GC的簡要信息 [GC 51790K->1374K(115872K), 0.0001606 secs]
3.-XX:+PrintGCDetails(打印GC詳細(xì)信息)
4.-XX:+PrintGCTimeStamps(打印CG發(fā)生的時間戳 )
[GC[DefNew: 6716K->0K(4528K), 0.0007 secs] 8790K->374K(15872K), 0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] - 5.-XX:+PrintGCDetails的輸出
6.-Xloggc:log/gc.log (制定GC的輸出位置)
7.-XX:+PrintHeapAtGC(每次一次GC后,都打印堆信息)
8.-XX:+TraceClassLoading (打印class的加載) 9.-XX:+PrintClassHistogram(按下Ctrl+C后,打印類的信息)
堆的分配參數(shù)
1.-Xmx –Xms(指定最大堆和最小堆)
System.out.print("Xmx=");
System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024+"M");
System.out.print("free mem=");
System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024+"M");
System.out.print("total mem=");
System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024+"M");
2.-Xmn(設(shè)置新生代大小)
3.-XX:NewRatio
新生代(eden+s0+S1)和老年代(不包含永久區(qū))的比值。
這個值其實是年老代與年輕代的比值,-XX:NewRatio=4表示年老代與年輕代的比值為4:1 即年輕代占堆的1/5
4.-XX:SurvivorRatio
設(shè)置兩個Survivor區(qū)和eden的比8表示 兩個Survivor:eden=2:8,即一個Survivor占年輕代的1/10(會有一個s空置) 為什么需要兩個s區(qū)?
堆的分配參數(shù)
1.-XX:+HeapDumpOnOutOfMemoryError (OOM時導(dǎo)出堆到文件)
2.-XX:+HeapDumpPath(導(dǎo)出OOM的路徑)
-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
3.-XX:OnOutOfMemoryError
在OOM時,執(zhí)行一個腳本 "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“ 當(dāng)程序OOM時,在D:/a.txt中將會生成線程的dump 可以在OOM時,發(fā)送郵件,甚至是重啟程序
非堆的分配參數(shù)
1.-XX:PermSize(表示非堆區(qū)初始內(nèi)存分配大小,其縮寫為permanent size(持久化內(nèi)存))
2、-XX:MaxPermSize(表示對非堆區(qū)分配的內(nèi)存的最大上限)
方法區(qū)和運(yùn)行時常量
3.-Xss 棧內(nèi)存大小
4.-XX:MaxDirectMemorySize 直接內(nèi)存大小 不指定默認(rèn)和堆的Xmx一樣大小。
總結(jié)
根據(jù)實際事情調(diào)整新生代和幸存代的大小
官方推薦新生代占堆的3/8
幸存代占新生代的1/10
在OOM時,記得Dump出堆,確保可以排查現(xiàn)場問題
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點(diǎn)個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!