JVM系列筆記目錄
- 虛擬機的基礎概念
- class檔案結構
- class檔案加載程序
- jvm記憶體模型
- JVM常用指令
- GC與調優
了解HotSpot常用命令列引數
JVM的命令列引數參考: https://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記憶體地址指的是:起始地址、使用空間結束地址、整體空間結束地址;

知識分享,轉載請注明出處,學無先后,達者為先!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/176527.html
標籤:其他
上一篇:Django筆記:下載csv檔案
下一篇:Linux之正則運算式
