永久代和元空間(Metaspace)

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

相關文章
相關標籤/搜索