一、配置參數使用條件
在不斷重構代碼的情況下,仍然不能解決內存溢出的問題(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之后才有該參數)。
五、非堆區參數配置
(1)-XX:PermSize:非堆區初始化內存分配大小。
(2)-XX:MaxPermSize:非堆區分配的內存的最大上限。