JVM系列(1)- JVM常見引數及堆記憶體分配
阿新 • • 發佈:2019-12-31
常見引數配置
基於JDK1.6
-XX:+PrintGC 每次觸發GC的時候列印相關日誌 -XX:+UseSerialGC 序列回收模式 -XX:+PrintGCDetails 列印更詳細的GC日誌 -Xms 堆的初始值 -Xmx 堆的最大可用值 -Xmn 新生代堆的最大可用值 -XX:SurvivorRatio 用來設定新生代中eden空間和from/to空間的比例 -XX:NewRatio 配置新生代與老年代的佔比
總結:在實際工作中,可以直接將初始的堆大小與最大堆大小相等,減少程式執行時垃圾回收的次數,提高效率。
如:-Xms512m -Xmx512m
通過程式碼檢視堆記憶體分配
public class MemoryTest {
public static void main(String[] args) {
System.out.println("最大記憶體:" + Runtime.getRuntime().maxMemory()/1024/1024 + "M");
System.out.println("可用記憶體:" + Runtime.getRuntime().freeMemory()/1024 /1024 + "M");
System.out.println("已使用記憶體:" + Runtime.getRuntime().totalMemory()/1024/1024 + "M");
System.out.println("=============================================================");
byte[] b = new byte[200*1024*1024];
System.out.println("分配了200M空間給陣列....");
System.out.println("最大記憶體:" + Runtime.getRuntime().maxMemory()/1024 /1024 + "M");
System.out.println("可用記憶體:" + Runtime.getRuntime().freeMemory()/1024/1024 + "M");
System.out.println("已使用記憶體:" + Runtime.getRuntime().totalMemory()/1024/1024 + "M");
}
}
複製程式碼
列印資訊:
如果改為2000,
byte[] b = new byte[2000*1024*1024];
複製程式碼
超過了1792M,所以會報記憶體溢位: