堆內存配置參數
參數 |
描述 |
-Xms |
JVM初始化堆內存大小 |
-Xmx |
堆內存最大值 |
-Xmn |
堆內存年輕代大小,剩下爲老年代大小 |
-XX:PermGen |
永久代初始化大小(JDK1.8開始放棄了永久代) |
-XX:MaxPermGen |
永久代最大值 |
-XX:SurvivorRatio |
Eden Space和Survivor Space空間的比例 |
-XX:NewRatio |
設置老年代和年輕代空間的比例,默認值爲2 |
GC配置參數
參數 |
描述 |
-XX:+UseSerialGC |
串行,年輕代和老年代都使用串行,使用複製算法回收,邏輯簡單,無線程切換開銷 |
-XX:+UseParallelGC |
並行,年輕代使用Parallel scavenge回收算法,會產生多個線程並行回收。通過-XX:ParallelGCThreads=n參數指定線程數,默認等於CPU核數;老年代單線程串行。 |
-XX:+UseParallelOldGC |
並行,不過年輕代和老年代都使用多線程並行收集 |
-XX:+UseConcMarkSweepGC |
併發,短暫停頓的併發收集。年輕代可以使用普通的或者Parallel垃圾收集算法,由參數-XX:+UsePerNewGC來控制;老年代只能使用Concurrent Mark Sweep算法。 |
-XX:+UseG1GC |
並行的,併發的,增量式壓縮,短暫停頓的垃圾收集器。不區分年輕代老年代,把堆空間劃分爲多個大小相等的區域,當執行GC時,會優先收集存活對象較少的區域,因此叫“Garbage First”。 |
綜上所述,目前收集器有串行、並行和併發三種,對大內存的應用而言,串行的性能太低,因此常用的主要是並行和併發兩種,具體由UseParallelGC和UseConcMarkSweep參數指定。
通常年輕代回收只可選擇並行收集器(耗時),老年代選擇併發收集器(耗CPU)。
常用的配置
參數設置 |
描述 |
-Xms4800M |
設置初始化堆內存大小 |
-Xmx4800M |
設置最大堆內存大小(一般與初始堆內存大小相等) |
-Xmn1800M |
|
-Xss512k |
|
-XX:+UseStringCache |
|
-XX:+UseConcMarkSweepGC |
|
-XX:+UsePermNewGC |
|
-XX:+ParallelGCThreads=4 |
|
-XX:+CMSClassUploadingEnabled |
允許對類的元數據進行清理 |
-XX:+DisableExplicitGC |
禁止顯式的GC |
-XX:+CMSInitiatingOccupancyOnly |
表示只有達到閥值以後才進行CMS回收 |
-XX:+CMSInitiatingOccupancyFraction=68 |
設置CMS在老年代的回收閥值爲68% |
-verbose:gc |
輸出虛擬機GC詳情 |
-XX:+PrintGCDetails |
打印GC詳情日誌 |
-XX:+PrintGCDateStamps |
打印GC的耗時 |
-XX:+PrintTenuringDistribution |
打印Tenuring年齡信息 |
-XX:+HeapDumpOnOutMermoryError |
當拋出OOM時進行HeapDump |
-XX:HeapDumpPath=/home/admin/logs |
指定HeapDump的文件路徑 |