天天看點

JVM性能調優- 配置參數詳解 -Xms -Xmx -XX:newSize -XX:MaxnewSize -Xmn -XX:PermSize -XX:MaxPermSize

JVM中的-Xms -Xmx -XX:newSize -XX:MaxnewSize -Xmn -XX:PermSize -XX:MaxPermSize差別介紹

一、配置參數使用條件

 在不斷重構代碼的情況下,仍然不能解決記憶體溢出的問題(OutOfMemoryError等),這種情況下就需要使用JVM的配置參數對JVM運作時各個區域的記憶體情況進行相應的配置設定。

二、JVM存儲資料的内容的記憶體分為

   ①堆區(Java堆:所有的線程共享該區域):通過new的方式建立的對象(一個類的執行個體)、數組所占的空間。

        注意:1)堆區還細分為新生代(Eden空間、From Survivor空間、To Survivor空間)、老年代(Tenured Generation空間)。

                     2)Java垃圾回收機制隻作用于堆區,對非堆區沒有作用。

   ②非堆區:代碼、常量、外部通路(比如流在傳輸資料時所占用的資源)等。

三、常見的參數種類(配置記憶體)

(1)配置堆區的參數:-Xms、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn

(2)配置非堆區的參數:-XX:PermSize、-XX:MaxPermSize

四、堆區參數配置

 (1)-Xms:Java虛拟機堆區記憶體初始記憶體配置設定的大小,按照實際情況進行配置設定(一般為作業系統可用記憶體的1/64大小)。

(2)-Xmx:Java虛拟機堆區記憶體可被配置設定的最大上限(一般為作業系統可用記憶體的1/4大小)。

注意:①一般-Xms、-Xmx兩個參數會配置相同的值(優點:能夠在Java垃圾回收機制清理完堆區後不需要重新分隔計算堆區的大小而浪費資源)。

(3)-XX:newSize:新生代初始化記憶體的大小(注意:該值需要小于-Xms的值)。

(4)-XX:MaxnewSize:新生代可被配置設定的記憶體的最大上限(注意:該值需要小于-Xmx的值)。

(5)-Xmn:對-XX:newSize、-XX:MaxnewSize兩個參數同時進行配置(注意:JDK1.4之後才有該參數)。

五、非堆區參數配置