`
ncs123
  • 浏览: 102732 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JVM系列之Metaspace

    博客分类:
  • JVM
阅读更多
一、Metaspace介绍
    JDK 8 开始把类的元数据放到本地堆内存(native heap)中,这一块区域就叫 Metaspace,中文名叫元空间。
    使用本地内存有什么好处呢?最直接的表现就是OOM问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。不过,让 Metaspace 变得无限大显然是不现实的,因此我们也要限制 Metaspace 的大小:使用 -XX:MaxMetaspaceSize 参数来指定 Metaspace 区域的大小。JVM 默认在运行时根据需要动态地设置 MaxMetaspaceSize 的大小。

二、JDK1.7 和 JDK1.8 内存区别

  • 去除了PermGen,Native Memory中新增了Metaspace
  • 静态变量和常量池移到了Heap Space
  • 类元数据移到了Metaspace


三、Metaspace 和 PermGen 比较

    PermGen的劣势
  • 固定的PermSize,大小很难确定并且很难进行扩展
  •     -XX:MaxPermSize
        -XX:PermSize
  • 在进行full GC时PermGen中的class meta对象有可能会被移动
  • 发生java.lang.OutOfMemoryError: PermGen error时
  •     应用程序要清除与class关联的所有引用
        要么更改MaxPermSize重启应用
  • 需要meta-classmeta对象对classmeta对象进行描述
  • 垃圾回收效率较低,需要进行对整个PermGen进行扫描


    Metaspace的优势
  • 类和类元数据的生命周期与类加载器一致
  • Metaspace的空间分配是线性的,可随类加载的数量进行线性的扩展,默认情况下只与native memory大小有关
  • 元数据的位置在native memory中的位置是固定的
  • GC时不会对metaspace空间进行扫描,节省了扫描和压缩的时间(如果设置了Metaspace的大小,当到达该Metaspace的阀值也会进行full GC)
  • 减小了full gc的时间


  • 大小: 96.5 KB
分享到:
评论

相关推荐

    Java8_Metaspace

    http://blog.csdn.net/notsaltedfish/article/details/77866472 该博客用于测试metaspace内存溢出的代码,启动ClassMetadataLeakSimulator类当中的main方法即可测试,另外将JVM metaspace内存设置小一点,这样能够更...

    JVM成神之路.rar

    "JVM成神之路.rar"这个压缩包显然提供了一条深入理解JVM的路径,通过作者精心录制的6小时视频教程和54页的配套笔记,我们可以期待全面了解JVM的体系结构以及与其相关的内存管理,特别是垃圾回收(GC)机制。...

    小菜鸟系列-JVM体系结构

    **小菜鸟系列-JVM体系结构** Java虚拟机(JVM)是Java平台的核心组成部分,它为Java程序提供了跨平台的运行环境。理解JVM的体系结构对于优化代码性能、排查故障以及深入理解Java编程至关重要。在本文中,我们将探讨...

    jvm原理及调优

    方法区域(在HotSpot JVM中称为Metaspace)用于存储类的元数据,包括类的信息、静态变量、常量、Field信息和方法信息等。这部分区域是全局共享的,当需要的内存超出其容量限制时,会抛出`OutOfMemoryError`。 #####...

    jvm-mon基于控制台的JVM监视

    1. **内存监控**:`jvm-mon`能够显示堆内存、非堆内存(如 PermGen 或 Metaspace)的使用情况,包括总大小、已分配、已使用以及剩余空间等信息,帮助开发者发现内存溢出问题。 2. **GC活动追踪**:它会记录垃圾收集...

    jvmjava,java实现的JVM。.zip

    此外,还可以探索JVM的最新特性,如G1垃圾收集器、Metaspace等。 总结,"jvmjava"项目是一个极好的学习资源,它使开发者有机会亲手构建一个JVM,从底层理解Java应用程序的运行机制。无论是初学者还是经验丰富的...

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    在部署Java Web应用时,Tomcat作为常见的容器之一,其JVM内存设置同样至关重要。以下是在Tomcat环境中优化JVM内存的具体步骤: 1. **环境变量设置**:通过设置`CATALINA_OPTS`环境变量,可以在系统级别全局地调整...

    jvm 内存分析文档

    这部分在JVM规范中被称为“非堆”(Non-Heap),在Java 8及以后版本,这部分被合并到堆内存中,称为元空间(Metaspace)。 - **本地方法栈(Native Method Stack)**:与JVM栈类似,但服务于本地方法(如C++方法)...

    JVM思维导图(包含所有JVM知识)

    - **JVM参数**:例如-Xms、-Xmx设定堆内存大小,-Xmn设定新生代大小,-Xss设定线程栈大小,-XX:MetaspaceSize和-XX:MaxMetaspaceSize设定元空间大小,-XX:SurvivorRatio设定新生代Survivor区的比例。 5. **其他...

    JVM

    3. **方法区**:存储类信息、常量、静态变量等,也称为永久代,在现代JVM中通常被元空间(Metaspace)替代。 ### 垃圾收集(Garbage Collection) JVM自动进行内存清理,防止内存泄漏。垃圾收集器主要有串行、并行...

    蚂蚁课堂-JVM快速入门2

    在IT行业中,Java虚拟机(JVM)是Java程序运行的核心组成部分,对于任何Java开发者来说,理解JVM的工作原理和优化技巧都是至关重要的。"蚂蚁课堂-JVM快速入门2"这个课程显然旨在帮助初学者迅速掌握JVM的基础知识,...

    JVM调优和故障排除手册

    3. 永久代(PermGen)与元空间(Metaspace):这部分内容涉及到Java 8中从PermGen向Metaspace的转变。永久代是Java 8之前版本中用于存储类信息、方法、常量池等的内存区域。Java 8引入了元空间来替代永久代,并且元...

    JVM内存模型深度剖析与优化.pdf

    JVM内存模型是Java虚拟机的核心组件之一,它直接影响着Java应用程序的性能和可靠性。本文将深入剖析JVM内存模型的结构和工作机理,并讨论如何优化JVM参数以提高Java应用程序的性能。 一、JVM内存模型结构 JVM内存...

    JVM历史发展和内存回收笔记

    7. **Java 8与元空间**:2014年,Java 8中,永久代被元空间(Metaspace)取代,以减少Full GC的发生。 8. **Java 11与ZGC**:2018年,Java 11引入了ZGC(Z Garbage Collector),这是一个低延迟的垃圾回收器,针对...

    深入理解JVM&G1; GC

    堆内存主要分为年轻代(Young Generation)、老年代(Tenured Generation或Old Generation)和元空间(Metaspace)三个区域。年轻代又细分为Eden区、Survivor区(S0和S1),主要用于存储新创建的对象。当Eden区满时...

    JVM内存空间分配笔记

    而在JDK 8之后,方法区被移到了本地内存中,被称为元空间(Metaspace)。 - **变化**:JDK 8之后,方法区从堆中分离,变为元空间。 - **存储位置**:元空间位于物理内存中。 - **特点**: - 线程共享。 - 存储类...

    JVM调优实践 ⼀、JVM调优准备⼯作 实验报告 pdf

    例如,通过调整初始堆大小(`-Xms`)、最大堆大小(`-Xmx`)、新生代大小(`-Xmn`)、元空间大小(`-XX:MetaspaceSize`和`-XX:MaxMetaspaceSize`)等参数,可以优化内存分配和垃圾回收性能。此外,启用垃圾收集日志...

    JVM 全方位详细理解实战

    【JVM全方位理解实战】 Java虚拟机(JVM)是Java程序的核心,它负责解析字节码并执行Java代码。本文将深入探讨JVM的结构、堆与栈的区别以及垃圾回收策略,帮助开发者理解如何在实际操作中进行JVM调优。 首先,JVM...

    设置Eclipse的JVM参数

    其中,设置合适的JVM(Java虚拟机)参数是优化Eclipse运行性能的重要手段之一。本文将详细介绍如何设置Eclipse的JVM参数,并解释这些参数的意义及其对Eclipse性能的影响。 #### 二、Eclipse与JVM的关系 Eclipse...

    JVM 深入学习教程深入分析JVM教程!jvm 内存原型,优化等等

    在较新的JVM版本中,这部分已经被元空间(Metaspace)所替代。 3. 栈内存:每个线程都有一个独立的栈,用于存储方法调用时的局部变量、操作数栈、动态链接及方法出口等信息。栈帧随着方法的调用和返回而创建和销毁...

Global site tag (gtag.js) - Google Analytics