原創 java金融 java金融 2019-09-01java
Trace跟蹤參數ide
1.-verbose:gc線程
2.-XX:+printGCcode
能夠打印GC的簡要信息 [GC 51790K->1374K(115872K), 0.0001606 secs]內存
3.-XX:+PrintGCDetails(打印GC詳細信息)get
4.-XX:+PrintGCTimeStamps(打印CG發生的時間戳 )it
[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的輸出io
6.-Xloggc:log/gc.log (制定GC的輸出位置)class
7.-XX:+PrintHeapAtGC(每次一次GC後,都打印堆信息)jdk
8.-XX:+TraceClassLoading (打印class的加載) 9.-XX:+PrintClassHistogram(按下Ctrl+C後,打印類的信息)
堆的分配參數
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(設置新生代大小)
3.-XX:NewRatio
新生代(eden+s0+S1)和老年代(不包含永久區)的比值。
這個值實際上是年老代與年輕代的比值,-XX:NewRatio=4表示年老代與年輕代的比值爲4:1 即年輕代佔堆的1/5
4.-XX:SurvivorRatio
設置兩個Survivor區和eden的比8表示 兩個Survivor:eden=2:8,即一個Survivor佔年輕代的1/10(會有一個s空置) 爲何須要兩個s區?
堆的分配參數
1.-XX:+HeapDumpOnOutOfMemoryError (OOM時導出堆到文件)
2.-XX:+HeapDumpPath(導出OOM的路徑)
-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
3.-XX:OnOutOfMemoryError
在OOM時,執行一個腳本 "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p「 當程序OOM時,在D:/a.txt中將會生成線程的dump 能夠在OOM時,發送郵件,甚至是重啓程序
非堆的分配參數
1.-XX:PermSize(表示非堆區初始內存分配大小,其縮寫爲permanent size(持久化內存))
二、-XX:MaxPermSize(表示對非堆區分配的內存的最大上限)
方法區和運行時常量
3.-Xss 棧內存大小
4.-XX:MaxDirectMemorySize 直接內存大小 不指定默認和堆的Xmx同樣大小。
總結
根據實際事情調整新生代和倖存代的大小
官方推薦新生代佔堆的3/8
倖存代佔新生代的1/10
在OOM時,記得Dump出堆,確保能夠排查現場問題