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
相关文章
相关标签/搜索