JVM内存模型之方法区
2017-08-23 22:01
288 查看
方法区
又称非堆区(Non-Heap)
属于
线程共有
内容
主要用来存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。JDK8之前又被称为永久带 (Permanent Generation),JDK8永久带已被元空间 (MetaSpace)替代,虽然JDK1.7仍然保留永久带,但存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。
错误及代码
会报OutOfMemoryError: Metaspace
常用参数
-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集
又称非堆区(Non-Heap)
属于
线程共有
内容
主要用来存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。JDK8之前又被称为永久带 (Permanent Generation),JDK8永久带已被元空间 (MetaSpace)替代,虽然JDK1.7仍然保留永久带,但存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。
错误及代码
会报OutOfMemoryError: Metaspace
//-XX:MetaspaceSize=4m -XX:MaxMetaspaceSize=4m public class TestMethodArea { public static void main(String[] args) { while (true){ new TestMethodArea(); } } }
常用参数
-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集
相关文章推荐
- jvm内存模型中-栈,方法区,程序计数器是线程安全的
- Jvm 内存模型之二撩裙边/方法执行
- JVM-由常量池 运行时常量池 String intern方法想到的(三)之String内存模型
- JVM内存模型及垃圾回收算法
- 理解JVM-内存模型
- 《深入理解JVM》内存模型
- JVM内存模型以及垃圾收集策略解析(重要)
- JVM内存模型及垃圾收集策略解析
- JVM内存模型
- java中JVM虚拟机内存模型详细说明
- java虚拟机方法区内存模型
- 深入理解JVM—JVM内存模型
- 深入JVM系列(一)之内存模型与内存分配
- 关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- jvm(一)java对象内存模型
- JVM内存模型之栈
- JVM内存模型
- 理解 JVM:JVM 内存模型
- 深入分析Java规范中JVM的内存布局模型
- JVM 内存模型