1. 程式人生 > >java堆記憶體引數調整

java堆記憶體引數調整

1.java堆記憶體引數

  我們為什麼需要進行jvm堆記憶體調整?

         因為jvm垃圾回收機制,主要發生在堆記憶體區域,從堆的記憶體結構劃分,裡面存在伸縮區概念,那麼頻發的伸縮會影響jvm效能,所以我們需要去掉伸縮區。只需要-Xms和-Xmx大小相等,即堆記憶體裡面-Xms和-Xmx是比較重要的引數。我們也可以將垃圾回收的日誌打印出來。這時需要-XX:+PrintGCDetails引數。

     這裡寫圖片描述

這裡有兩種方配置引數:命令列(自己百度,這裡不介紹),工具(eclipse,ideal),這裡講ideal的配置

第一步:找到Edit Configurations

 

第二步:在 vm options 寫上對應的引數

 我們如何監控java程式?

 

開發者:可以在配置引數,打印出日誌,對日誌進行分析。(下面講對日誌如何分析)

運維人員:可以使用jmap和jvisualvm.exe來檢視日誌

接下來看一下如何讓jvm報出OutOfMemory異常來分析日誌?

程式如下:

public static void main(String[] args){
    List<String> list = new ArrayList<>();
     long i = 0;
    String string = "aaaaaaa";
    while (true) {
        string = (i++) + "";
        string.intern();
        list.add(string.intern());
    }
}

日誌資訊:

 

 分析:

[GC (觸發MinorGC)[PSYoungGen(年輕代複製演算法): 2560K(垃圾回收前年輕代記憶體)->508K(垃圾回收後年輕代記憶體)(3072K(總記憶體))] 2560K(堆記憶體回收前大小)->1062K(堆記憶體回收後大小)(10240K(堆總記憶體)), 0.0020058 secs] [Times: user=0.00(GC使用者耗時) sys=0.00(GC系統耗時), real=0.00 secs(GC實際耗時)

通過可以上面引數可以計算出往老年代移動的多少物件:(2560-1062)-(2560-508)