程序員都應該知道的JVM參數

原創 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出堆,確保能夠排查現場問題

相關文章
相關標籤/搜索