JVM - Metaspace

作者: 万福来 | 来源:发表于2020-04-02 16:20 被阅读0次

    JVM - Metaspace

    JDK8 HotSpot JVM现在使用了本地内存来存储类元数据,被称为Metaspace,和Oracle JRockit以及IBM JVM类似。
    它意味着java.lang.OutOfMemoryError:PermGen space问题会越来越少,也不再需要你去调整和监控内存空间。然而这种变化默认是可不见的,接下来我们给你展示的,是你仍然需要关注类元数据内存占用。请记住,这些新特点并不会很神奇的消除类和类加载器的内存泄露。你需要使用不同的方法和学习新的命名约定来找出问题的根源。

    总结:

    1. 持久代场景
      • 这块内存区域被完全移除。
      • PermSize和MaxPermSize JVM 参数会被忽略,并且在启动的时候会给出警告信息。
    2. Metaspace 内存分配模型
      • 对于类元数据的大多数内存分配都不会发生在本地内存。
      • 被用于描述类元数据的类对象被移除。
    3. Metaspace 容量
      • 默认的,类元数据分配限制于可用的本地内存 (容量大小依赖于你用32位jvm或者64位jvm的操作系统可用虚拟内存)。
      • 新的标记已经可以使用 (MaxMetaspaceSize),它允许你限制用于类元数据的本地内存大小。如果你没有指定这个标记,Metaspace会根据运行时应用程序的需求来动态的控制大小。
    4. Metaspace 垃圾收集
      • 一旦类元数据的使用量达到了“MaxMetaspaceSize”指定的值,对于无用的类和类加载器,垃圾收集此时会触发。
      • 为了控制这种垃圾收集的频率和延迟,合适的监控和调整Metaspace非常有必要。过于频繁的Metaspace垃圾收集是类和类加载器发生内存泄露的征兆,同时也说明你的应用程序内存大小不合适,需要调整。
    5. Java 堆空间影响
      •一些杂项数据被移到了Java堆空间。这意味着当你更新到JDK8后会观察到Java堆空间的增长。
    6. Metaspace 监控
      • Metaspace 的使用可以通过HotSpot 1.8的详细的GC日志输出观察到。
      • 在基于b75上测试的时候Jstat 和 JVisualVM 还没有更新,旧的持久代空间引用依然存在。

    相关文章

      网友评论

        本文标题:JVM - Metaspace

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