一、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
分享到:
相关推荐
http://blog.csdn.net/notsaltedfish/article/details/77866472 该博客用于测试metaspace内存溢出的代码,启动ClassMetadataLeakSimulator类当中的main方法即可测试,另外将JVM metaspace内存设置小一点,这样能够更...
"JVM成神之路.rar"这个压缩包显然提供了一条深入理解JVM的路径,通过作者精心录制的6小时视频教程和54页的配套笔记,我们可以期待全面了解JVM的体系结构以及与其相关的内存管理,特别是垃圾回收(GC)机制。...
**小菜鸟系列-JVM体系结构** Java虚拟机(JVM)是Java平台的核心组成部分,它为Java程序提供了跨平台的运行环境。理解JVM的体系结构对于优化代码性能、排查故障以及深入理解Java编程至关重要。在本文中,我们将探讨...
方法区域(在HotSpot JVM中称为Metaspace)用于存储类的元数据,包括类的信息、静态变量、常量、Field信息和方法信息等。这部分区域是全局共享的,当需要的内存超出其容量限制时,会抛出`OutOfMemoryError`。 #####...
1. **内存监控**:`jvm-mon`能够显示堆内存、非堆内存(如 PermGen 或 Metaspace)的使用情况,包括总大小、已分配、已使用以及剩余空间等信息,帮助开发者发现内存溢出问题。 2. **GC活动追踪**:它会记录垃圾收集...
此外,还可以探索JVM的最新特性,如G1垃圾收集器、Metaspace等。 总结,"jvmjava"项目是一个极好的学习资源,它使开发者有机会亲手构建一个JVM,从底层理解Java应用程序的运行机制。无论是初学者还是经验丰富的...
在部署Java Web应用时,Tomcat作为常见的容器之一,其JVM内存设置同样至关重要。以下是在Tomcat环境中优化JVM内存的具体步骤: 1. **环境变量设置**:通过设置`CATALINA_OPTS`环境变量,可以在系统级别全局地调整...
这部分在JVM规范中被称为“非堆”(Non-Heap),在Java 8及以后版本,这部分被合并到堆内存中,称为元空间(Metaspace)。 - **本地方法栈(Native Method Stack)**:与JVM栈类似,但服务于本地方法(如C++方法)...
MyEclipse修改jvm内存配置 MyEclipse是一款功能强大且广泛应用于企业级应用开发的集成开发环境(IDE)。在开发过程中,jvm虚拟机的内存配置直接影响着开发的效率和稳定性。如果jvm虚拟机的内存配置不当,可能会导致...
- **JVM参数**:例如-Xms、-Xmx设定堆内存大小,-Xmn设定新生代大小,-Xss设定线程栈大小,-XX:MetaspaceSize和-XX:MaxMetaspaceSize设定元空间大小,-XX:SurvivorRatio设定新生代Survivor区的比例。 5. **其他...
3. **方法区**:存储类信息、常量、静态变量等,也称为永久代,在现代JVM中通常被元空间(Metaspace)替代。 ### 垃圾收集(Garbage Collection) JVM自动进行内存清理,防止内存泄漏。垃圾收集器主要有串行、并行...
在IT行业中,Java虚拟机(JVM)是Java程序运行的核心组成部分,对于任何Java开发者来说,理解JVM的工作原理和优化技巧都是至关重要的。"蚂蚁课堂-JVM快速入门2"这个课程显然旨在帮助初学者迅速掌握JVM的基础知识,...
3. 永久代(PermGen)与元空间(Metaspace):这部分内容涉及到Java 8中从PermGen向Metaspace的转变。永久代是Java 8之前版本中用于存储类信息、方法、常量池等的内存区域。Java 8引入了元空间来替代永久代,并且元...
JVM内存模型是Java虚拟机的核心组件之一,它直接影响着Java应用程序的性能和可靠性。本文将深入剖析JVM内存模型的结构和工作机理,并讨论如何优化JVM参数以提高Java应用程序的性能。 一、JVM内存模型结构 JVM内存...
7. **Java 8与元空间**:2014年,Java 8中,永久代被元空间(Metaspace)取代,以减少Full GC的发生。 8. **Java 11与ZGC**:2018年,Java 11引入了ZGC(Z Garbage Collector),这是一个低延迟的垃圾回收器,针对...
堆内存主要分为年轻代(Young Generation)、老年代(Tenured Generation或Old Generation)和元空间(Metaspace)三个区域。年轻代又细分为Eden区、Survivor区(S0和S1),主要用于存储新创建的对象。当Eden区满时...
而在JDK 8之后,方法区被移到了本地内存中,被称为元空间(Metaspace)。 - **变化**:JDK 8之后,方法区从堆中分离,变为元空间。 - **存储位置**:元空间位于物理内存中。 - **特点**: - 线程共享。 - 存储类...
例如,通过调整初始堆大小(`-Xms`)、最大堆大小(`-Xmx`)、新生代大小(`-Xmn`)、元空间大小(`-XX:MetaspaceSize`和`-XX:MaxMetaspaceSize`)等参数,可以优化内存分配和垃圾回收性能。此外,启用垃圾收集日志...
【JVM全方位理解实战】 Java虚拟机(JVM)是Java程序的核心,它负责解析字节码并执行Java代码。本文将深入探讨JVM的结构、堆与栈的区别以及垃圾回收策略,帮助开发者理解如何在实际操作中进行JVM调优。 首先,JVM...
其中,设置合适的JVM(Java虚拟机)参数是优化Eclipse运行性能的重要手段之一。本文将详细介绍如何设置Eclipse的JVM参数,并解释这些参数的意义及其对Eclipse性能的影响。 #### 二、Eclipse与JVM的关系 Eclipse...