JDK1.8的版本
機器配置:
JVM參數設定
JAVA_OPTS='-server -Xmn1g -Xms9g -Xmx9g -Xss512K -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/timerbackend_gc.hprof -XX:+ParallelRefProcEnabled -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g'
設定之後,GC的回收情況
參數詳解:
-server: 選擇使用 Java HotSpot Server VM3。特點是啟動速度比較慢,但運作時性能和記憶體管理效率很高,适用于生産環境。在具有 64 位能力的 jdk 環境下将預設啟用該模式,而忽略-server 參數。
-Xmn: 設定年輕代的初始和最大大小。建議将年輕代的規模保持在整體堆大小的一半到四分之一之間.
-Xms: 指定 jvm 堆的初始大小,預設為實體記憶體的 1/64,最小為 1M;可以指定機關,比如 k、m,若不指定,則預設為位元組。如果未設定此選項,則初始大小将設定為為老年代和年輕代分的大小之和。可以使用選項
-Xmn-XX:NewSize
設定年輕代的堆的初始大小。注意,
-Xms-XX:InitalHeapSize
選項還可用于設定初始堆大小。如果它出現在指令行之後,則初始堆大小将設定為用
-Xms-XX:InitalHeapSize
指定的值。
-Xmx: 指定 jvm 堆的最大值,預設為實體記憶體的 1/4 或者 1G,最小為 2M;機關與 - Xms 一緻。對于伺服器部署,-Xms 和 - Xmx 通常設定為相同的值。該選項等效于
-Xmx-XX:MaxHeapSize
.
-Xss: 設定單個線程棧的大小,一般預設為 512k。
-XX:+UseConcMarkSweepGC:使用 ParNew + CMS + Serial Old 的收集器組合進行記憶體回收,Serial Old 作為 CMS 出現 “Concurrent Mode Failure” 失敗後的後備收集器使用。
XX:+CMSParallelRemarkEnabled :降低标記停頓
-XX:+UseCMSCompactAtFullCollection:由于 CMS 收集器會産生碎片,此參數設定在垃圾收集器後是否需要一次記憶體碎片整理過程,僅在 CMS 收集器時有效
-XX:LargePageSizeInBytes:記憶體頁的大小不可設定過大,會影響 Perm 的大小,-XX:LargePageSizeInBytes=128m,需要 OS 支援
-XX:+UseFastAccessorMethods: 頻繁反射時,生成位元組碼來加速
-XX:CMSInitiatingOccupancyFraction=70: 設定 CMS 收集器在老年代空間被使用多少後出發垃圾收集,預設值為 70%,僅在 CMS 收集器時有效
-XX:+HeapDumpOnOutOfMemoryError: 發生 OOM 的時候自動 dump 堆棧友善分析