🍀基礎知識
long totalMemory = Runtime.getRuntime().totalMemory(); // 返回 Java 虛擬機中的內存總量
long maxMemory = Runtime.getRuntime().maxMemory(); // 返回 Java 虛擬機視圖使用的最大內存量
System.out.println("TOTAL_MEMORY(-Xms) = " + totalMemory + "(字節)、" + (totalMemory / (double) 1024 * 1024) + "MB");
System.out.println("MAX_MEMORY(-Xmx) = " + maxMemory + "(字節)、" + (maxMemory / (double) 1024 * 1024) + "MB");
🍀常用參數
📌 -Xms
初始大小內存,默認爲物理內存 1/64 等價於 -XX:InitialHeapSize
📌 -Xmx
最大分配內存,默認爲物理內存 1/4 等價於 -XX:MaxHeapSize
📌 -Xss
設置單個線程棧的大小,一般默認爲 512k~1024k 等價於 -XX:ThreadStackSize
📌 -Xmn
設置年輕代大小
📌 -XX:MetaspaceSize
設置元空間大小
-Xms10m -Xmx10m -XX:MetaspaceSize=1024m -XX:+PrintFlagsFinal
📌 典型設置案例
-Xms128m -Xmx2048m -Xss1024k
-XX:MetaspaceSize=512m
-XX:+PrintCommandLineFlags
-XX:+PrintGCDetails
-XX:+UseSerialGC
📌 -XX:+PrintGCDetails
⏳ 輸出詳細的 GC 收集日誌信息
⏳ GC 信息解讀
⏳ FullGC 信息解讀
📌 -XX:SurvivorRatio
默認情況
Eden:S0:S1 = 8:1:1
-XX:+PrintGCDetails -XX:+UseSerialGC -Xms10m -Xmx10m -XX:SurvivorRatio=8
Eden:S0:S1 = 4:1:1
-XX:+PrintGCDetails -XX:+UseSerialGC -Xms10m -Xmx10m -XX:SurvivorRatio=4
📌 -XX:NewRatio
默認情況
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:NewRatio=2
修改
-Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+UseSerialGC -XX:NewRatio=4
📌 -XX:MaxTenuringThreshold
查看默認進入老年代年齡:
-XX:MaxTenuringThreshold=0:設置垃圾最大年齡。如果設置爲0的話,則年輕代對象不經過 Survivor 區,直接進入老年代。對於年老代比較多的應用,可以提高效率。如果將此值設置爲一個較大值,則年輕代對象會在 Survivor 區進行多次複製,這樣可以增加對象在年輕代的存活時間,增加在年輕代即被回收的概率。
========================================================
jinfo -flag MaxTenuringThreshold 15120
jinfo -flag PrintGCDetails 15120