PermGen(永久代)性能
- JVM 規範的一種實現
- 只有 HotSpot 纔有 「PermGen space」,
- 方法區:是JVM的一種規範,存放類信息、常量、靜態變量、即時編譯器編譯後的代碼等;
- 永久代:是HotSpot的一種具體實現,實際指的就是方法區,
元空間(Metaspace)spa
- 本質和永久代相似,都是對JVM規範中方法區的實現。
- 不過元空間與永久代之間最大的區別在於:
- 元空間並不在虛擬機中,而是使用本地內存。
- 所以,默認狀況下,元空間的大小僅受本地內存限制,
- 但能夠經過如下參數來指定元空間的大小:
- -XX:MetaspaceSize,初始空間大小,
- -XX:MaxMetaspaceSize,最大空間,默認是沒有限制的。
- -XX:MinMetaspaceFreeRatio,在GC以後,最小的Metaspace剩餘空間容量的百分比
- -XX:MaxMetaspaceFreeRatio,在GC以後,最大的Metaspace剩餘空間容量的百分比
JDK 8 中永久代向元空間的轉換,幾點緣由:內存
一、字符串存在永久代中,容易出現性能問題和內存溢出。字符串
二、類及方法的信息等比較難肯定其大小,編譯器
- 所以對於永久代的大小指定比較困難,
- 過小容易出現永久代溢出,
- 太大則容易致使老年代溢出。
三、永久代會爲 GC 帶來沒必要要的複雜度,而且回收效率偏低。虛擬機
四、Oracle 可能會將HotSpot 與 JRockit 合二爲一。it