GC之PermGen到Metaspace

    JDK8以前,static variables、class metadata存放在PermGen(Permanent Generation)中,JDK8上,static variables、class metadata存放在MetaSpace中。爲何要移除PermGen?java

PermGen 的缺點:google

  1.     PermGen是heap的一部分,使用達到limit時,會出現拋出OOM。雖然能夠指定maximum size,但使用的內存大小不能自動增加。
  2.     在引入PermGen時,沒有考慮dynamic class loading/unloading,class一旦被加載了,不能被動態unloading,會一直存在直到JVM shut down。

Metaspace的好處:spa

  1.     MetaSpace使用native memory space,它的大小會自動增加,直到操做系統所能提供的,這樣咱們即便不指定MaxSize,也不會出現OOM,除非達到操做系統提供的內存上限。
  2.     MetaSpace中,在JVM運行期間,class能夠被loading,也支持unloading。

    上面所述的可能只是分部,極可能說的不全,建議自行google/bing.com。操作系統

    移除Permanent Generation的JEP22描述。.net

參考:內存

  1. https://stackoverflow.com/questions/27131165/what-is-the-difference-between-permgen-and-metaspace
相關文章
相關標籤/搜索