您好,登錄后才能下訂單哦!
1.元空間:
元空間的本質和永久代類似,都是對JVM規范中方法區的實現。不過元空間與永久代之間最大的區別在于:元空間并不在虛擬機中,而是使用本地內存。因此,默認情況下,元空間的大小僅受本地內存限制。
但可以通過以下參數來指定元空間的大小:?
-XX:MetaspaceSize=N?
這個參數是初始化的Metaspace大小,該值越大觸發Metaspace GC的時機就越晚。隨著GC的到來,虛擬機會根據實際情況調控Metaspace的大小,可能增加上線也可能降低。在默認情況下,這個值大小根據不同的平臺在12M到20M浮動。使用java -XX:+PrintFlagsInitial命令查看本機的初始化參數,-XX:Metaspacesize為21810376B(大約20.8M)。
-XX:MaxMetaspaceSize=N?
這個參數用于限制Metaspace增長的上限,防止因為某些情況導致Metaspace無限的使用本地內存,影響到其他程序。在本機上該參數的默認值為4294967295B(大約4096MB)。
-XX:MinMetaspaceFreeRatio=N?
當進行過Metaspace GC之后,會計算當前Metaspace的空閑空間比,如果空閑比小于這個參數,那么虛擬機將增長Metaspace的大小。在本機該參數的默認值為40,也就是40%。設置該參數可以控制Metaspace的增長的速度,太小的值會導致Metaspace增長的緩慢,Metaspace的使用逐漸趨于飽和,可能會影響之后類的加載。而太大的值會導致Metaspace增長的過快,浪費內存。
-XX:MaxMetasaceFreeRatio=N?
當進行過Metaspace GC之后, 會計算當前Metaspace的空閑空間比,如果空閑比大于這個參數,那么虛擬機會釋放Metaspace的部分空間。在本機該參數的默認值為70,也就是70%。
-XX:MaxMetaspaceExpansion=N?
Metaspace增長時的最大幅度。在本機上該參數的默認值為5452592B(大約為5MB)。
-XX:MinMetaspaceExpansion=N?
Metaspace增長時的最小幅度。在本機上該參數的默認值為340784B(大約330KB為)。
2.元空間內存管理
元空間的內存管理由元空間虛擬機來完成。先前,對于類的元數據我們需要不同的垃圾回收器進行處理,現在只需要執行元空間虛擬機的C++代碼即可完成。
在元空間中,類和其元數據的生命周期和其對應的類加載器是相同的。
話句話說,只要類加載器存活,其加載的類的元數據也是存活的,因而不會被回收掉。?
準確的來說,每一個類加載器的存儲區域都稱作一個元空間,所有的元空間合在一起就是我們一直說的元空間。
當一個類加載器被垃圾回收器標記為不再存活,其對應的元空間會被回收。
可以參考文章:
https://blog.csdn.net/bolg_hero/article/details/78189621
https://www.cnblogs.com/williamjie/p/9558136.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。