JVM系列【6】GC與調優2.md
JVM系列筆記目錄
- 虛擬機的基礎概念
- class文件結構
- class文件加載過程
- jvm內存模型
- JVM常用指令
- GC與調優
了解HotSpot常用命令行參數
JVM的命令行參數參考: //docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
-標準 所有版本支持
-X 非標準 特定版本支持
-XX 不穩定 下個版本可能會取消
常見和本文中可能用到的參數記錄一下,具體垃圾回收器的參數後續調優的詳細說明。
參數 | 說明 |
---|---|
-Xmx | 最大可用內存 |
-Xms | 初始內存,一般和-Xmx相同,避免重新分配 |
-Xmn | 年輕代大小,JVM內存=年輕代+老年代大小+永久代(一般64M) |
-XX:+PrintFlagsInitial | 打印默認參數值 |
-XX:+PrintFlagsFinal | 打印最終參數值 |
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps |
打印GC情況、GC詳細日誌、GC日誌時間戳 |
常見垃圾回收器組合參數設定:(1.8)
如何查看JVM默認的垃圾回收器?
java -XX:+PrintCommandLineFlags -version
- 通過GC日誌來辨別是何種垃圾回收器
常見垃圾回收器組合參數設定:(1.8版本的)
>1. -XX:+UseSerialGC = Serial New (DefNew) + Serial Old 小型程序使用,默認情況下不會是這種選項,HotSpot會根據計算及配置和JDK版本自動選擇收集器
>2. -XX:+UseParNewGC = ParNew + SerialOld 這個組合已經很少用(在某些版本中已經廢棄)
>3. -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old
>4. -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默認) 【PS + SerialOld】
>5. -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
>6. -XX:+UseG1GC = G1
PS的GC日誌詳解
每一種垃圾回收器的日誌是不一樣。這裡提供一個樣例來詳細解釋PS的GC日誌。
public class HelloGC{
public static void main(String[] args){
System.out.println("HelloGC!");
List list = new ArrayList();
for(;;){
// 死循環中每次分配1M大小的數組,存放在list中,JVM內存不足的時候會產生GC
byte[] b = new byte[1024*1024];
list.add(b);
}
}
}
編譯後啟動命令:java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+UseParallelGC HelloGC
這裡設置了最大內存為60M,初始內存為40M,新生代的內存為10M,使用PS垃圾回收器,並打印GC的回收情況。程序運行很快就會產生GC日誌。
回收的日誌情況:
HeapDump情況,0x000xxxx內存地址指的是:起始地址、使用空間結束地址、整體空間結束地址;
知識分享,轉載請註明出處。學無先後,達者為先!