1. 程式人生 > 程式設計 >JVM系列(1)- JVM常見引數及堆記憶體分配

JVM系列(1)- JVM常見引數及堆記憶體分配

常見引數配置

基於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,所以會報記憶體溢位: