JVM永久带和元空间

    JVM的内存划分如下图,在JDK1.8版本废除了永久代,替代的是元空间,元空间与永久代类似,都是对方法区的实现,他们最大的区别是:Metaspace使用的是本地内存而不是JVM内存。也就是默认情况下Metaspace的大小只与本地内存大小有关。
    这两个参数来指定元空间的大小:-XX:MetaspaceSize,初始空间大小,-XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
    其实移出永久代的工作从JDK1.7就开始了JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。但永久代仍存在于JDK1.7中,并没完全移除,譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。
Java堆内存又溢出了!教你一招必杀技
    为什么要废除永久代?
    移出永久代是为了融合HotSpot JVM与JRockit VM(新JVM技术)而做出的改变,因为JRockit没有永久代。




posted @ 2020-05-07 11:20  gnice512  阅读(252)  评论(0编辑  收藏  举报