美文网首页
JAVA内存模型(二) 永久代和元空间

JAVA内存模型(二) 永久代和元空间

作者: Minstrel_a7ca | 来源:发表于2018-07-13 11:28 被阅读0次

    PermGen(永久代)

    与方法区的区别

    方法区是JVM规范,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
    PermGen则是一种具体实现。并且只有HotSpot 才有PermGen。
    由于方法区主要存储类的相关信息,所以对于动态生成类的情况比较容易出现永久代的内存溢出。
    不停的动态生成类,就会导致PermGen溢出。
    在JDK 1.8中,永久代这个区间就没有了,取而代之的是元空间。

    设置参数

    -XX:PermSize and -XX:MaxPermSize
    java -XX:PermSize=128m -XX:MaxPermSize=256m MyApp


    Metaspace(元空间)

    移除永久代的工作从JDK1.7就开始了。JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。
    字符串常量由永久代转移到堆中,并且 JDK 1.8 中已经不存在永久代的结论

    元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。

    设置参数

    -XX:MetaspaceSize and -XX:MaxMetaspaceSize
    java -XX:MetaspaceSize =128m -XX:MaxMetaspaceSize=256m MyApp

    相关文章

      网友评论

          本文标题:JAVA内存模型(二) 永久代和元空间

          本文链接:https://www.haomeiwen.com/subject/xgdjpftx.html