JVM(二):jdk8廢除永久代迎來元空間

jdk8廢除永久代迎來元空間。

 

永久帶又叫Perm區,只存在於hotspot jvm中,而且只存在於jdk7和以前的版本中,jdk8中已經完全移除了永久帶,jdk8中引入了一個新的內存區域叫metaspace。html

(1)並非全部的jvm中都有永久帶,ibm的j9,oracle的JRocket都沒有永久帶。java

(2)永久帶是實現層面的東西。oracle

(3)永久帶裏面存的東西基本上就是方法區規定的那些東西。jvm

所以,咱們能夠說,永久帶是方法區的一種實現,固然,在hotspot jdk8中metaspace能夠當作是方法區的一種實現。spa

 

爲何要移除永久代:.net

1.移除永久代是爲融合HotSpot JVM與 JRockit VM而作出的努力,由於JRockit沒有永久代,不須要配置永久代htm

2.因爲永久代內存常常不夠用或發生內存泄露,爆出異常java.lang.OutOfMemoryError: PermGenblog

深刻理解元空間:

元空間是方法區的在HotSpot jvm 中的實現,方法區主要用於存儲類的信息、常量池、方法數據、方法代碼等。方法區邏輯上屬於堆的一部分,可是爲了與堆進行區分,一般又叫「非堆」。內存

元空間的本質和永久代相似,都是對JVM規範中方法區的實現。不過元空間與永久代之間最大的區別在於:元空間並不在虛擬機中,而是使用本地內存。,理論上取決於32位/64位系統可虛擬的內存大小。可見也不是無限制的,須要配置參數。
get

 

經常使用配置參數

1.MetaspaceSize

初始化的Metaspace大小,控制元空間發生GC的閾值。GC後,動態增長或下降MetaspaceSize。在默認狀況下,這個值大小根據不一樣的平臺在12M到20M浮動。使用Java -XX:+PrintFlagsInitial命令查看本機的初始化參數

2.MaxMetaspaceSize

限制Metaspace增加的上限,防止由於某些狀況致使Metaspace無限的使用本地內存,影響到其餘程序。在本機上該參數的默認值爲4294967295B(大約4096MB)。

3.MinMetaspaceFreeRatio

當進行過Metaspace GC以後,會計算當前Metaspace的空閒空間比,若是空閒比小於這個參數(即實際非空閒佔比過大,內存不夠用),那麼虛擬機將增加Metaspace的大小。默認值爲40,也就是40%。設置該參數能夠控制Metaspace的增加的速度,過小的值會致使Metaspace增加的緩慢,Metaspace的使用逐漸趨於飽和,可能會影響以後類的加載。而太大的值會致使Metaspace增加的過快,浪費內存。

4.MaxMetasaceFreeRatio

當進行過Metaspace GC以後, 會計算當前Metaspace的空閒空間比,若是空閒比大於這個參數,那麼虛擬機會釋放Metaspace的部分空間。默認值爲70,也就是70%。

5.MaxMetaspaceExpansion

Metaspace增加時的最大幅度。在本機上該參數的默認值爲5452592B(大約爲5MB)。

6.MinMetaspaceExpansion

Metaspace增加時的最小幅度。在本機上該參數的默認值爲340784B(大約330KB爲)。

相關文章
相關標籤/搜索