(4)java方法区

java方法区
【名词解析】
        --->和java堆一样,方法区是一块所有线程共享的内存区域。
        --->保存系统的类信息,比如,类的字段,方法,常量池等。
        --->方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出的错误
        --->jdk1.6和jdk1.7方法区可以理解为永久区。
        --->jdk1.8已经将方法区取消,替代的是元数据区。
        --->jdk1.8的元数据区可以使用参数-XX:MaxMetaspaceSzie设定大小,这是一块堆外的直接内存,与永久区不同,如果不指定大小,默认情况下,虚拟机会耗尽可用系统内存

【参数设定】
        --->jdk1.6和jdk1.7的永久区可以使用参数-XX:PermSize 和-XX:MaxPermSize指定
        --->-XX:PermSize =5m 默认启动大小为5M
        --->-XX:MaxPermSize=64m 最大大小为64M
【异常】
        --->
        --->jdk1.8元数据区内存溢出:java.lang.OutOfMemoryError:Metaspace

时间: 2024-08-13 06:04:38

(4)java方法区的相关文章

Java方法区和运行时常量池溢出问题分析

运行时常量池是方法区的一部分,方法区用于存放Class的相关信息,如类名.访问修饰符.常量池.字段描述.方法描述等. String.intern()是一个native方法,它的作用是:如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回代表池中这个字符串的String对象:否则,将此String对象包含的字符串添加到常量池中,并返回此String对象的引用.在JDK1.6及之前版本中,由于常量池分配在永久代中(即方法区),我们可以通过-XX:PermSize和-XX:MaxPe

Java方法区

方法区 在一个jvm实例的内部,类型信息被存储在一个称为方法区的内存逻辑区中.类型信息是由类加载器在类加载时从类文件中提取出来的.类(静态)变量也存储在方法区中. jvm实现的设计者决定了类型信息的内部表现形式.如,多字节变量在类文件是以big-endian存储的,但在加载到方法区后,其存放形式由jvm根据不同的平台来具体定义. jvm在运行应用时要大量使用存储在方法区中的类型信息.在类型信息的表示上,设计者除了要尽可能提高应用的运行效率外,还要考虑空间问题.根据不同的需求,jvm的实现者可以在

Java方法区和运行时常量池溢出问题分析(转)

运行时常量池是方法区的一部分,方法区用于存放Class的相关信息,如类名.访问修饰符.常量池.字段描述.方法描述等. String.intern()是一个native方法,它的作用是:如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回代表池中这个字符串的String对象:否则,将此String对象包含的字符串添加到常量池中,并返回此String对象的引用.在JDK1.6及之前版本中,由于常量池分配在永久代中(即方法区),我们可以通过-XX:PermSize和-XX:MaxPe

java虚拟机 jvm java堆 方法区 java栈

java堆是java应用程序最密切的内存空间. 差点儿全部的对象都存在堆中.java堆全然自己主动化管理,通过垃圾回收机制,垃圾对象会自己主动清理.不须要显式释放. 依据java垃圾回收机制的不同.java堆可能有不同的结构. 最常见的是将整个java堆分为新生代和老年代.跟人类几乎相同了.老龄化就有可能找上帝去了,新生代存放新对象或者年龄不大的对象,老年代存放老年对象.新生代有可能分为eden区.s0区和s1区,s0区和s1区也被称之为 from 到to区域.他们是两块大小相等能够互换的内存空

JVM_02 堆、栈 、方法区概念和联系

一.三者联系 1.堆:解决数据的存储问题( 即 数据怎么放,放到哪 ). 2.栈:解决程序运行的问题( 即 程序如何执行,或者说如何处理数据 ). 3.方法区:辅助堆栈的一块永久区,解决堆栈信息的产生,是先决条件. 我们创建一个对象,User:那么 User类的一些信息 (  类信息.静态信息 ) 都存在于方法区中,我们可以根据这些信息来创建对应的对象.方法区中相当于存放着创建对象的模板. 二.堆 1.根据垃圾回收机制不同, 堆有可能拥有不同的结构,最常见的就是将整个堆分为新生代和老年代.其中新

03-JVM内存模型:堆与方法区

一.堆(Heap) 1.1.什么是堆 堆是用于存放对象的内存区域.因此,它是垃圾收集器(GC)管理的主要目标.其具有以下特点: 堆在逻辑上划分为"新生代"和"老年代".由于JAVA中的对象大部分是朝生夕灭,还有一小部分能够长期的驻留在内存中,为了对这两种对象进行最有效的回收,将堆划分为新生代和老年代,并且执行不同的回收策略.不同的垃圾收集器对这2个逻辑区域的回收机制不尽相同,在后续的章节中我们将详细的讲解. 堆占用的内存并不要求物理连续,只需要逻辑连续即可. 堆一般

java 堆 栈 方法区的简单分析

Java里的堆(heap)栈(stack)和方法区(method) 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收.   引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 . 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收.局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收. 方法调用时传入的

Java里的堆(heap)栈(stack)和方法区(method)

基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收.   引用数据类型,需要用new来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量 . 方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收.局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收. 方法调用时传入的 literal 参数,先在栈空间分配,在方法调用完成后从栈空间分配.

HotSpot Java虚拟机中的“方法区”“持久代”“元数据区”的关系?

Sun/Oracle JDK的HotSpot VM中,直到JDK7都有“持久代”(Permanent Generation,简称PermGen).也称为方法区.Oracle JDK8的HotSpot VM去掉“持久代”,以“元数据区”(Metaspace)替代之. Oracle是在JDK7的时候宣布移除PermGen内存区域,但是知道JDK8才最终移除. 在JDK7之前,所谓的Permanet Generation内存区域其实包含了两个部分: 方法区 Internded String 方法区主要