JVM中的方法区】的更多相关文章

JVM中的方法区 方法区存储什么? 用于存储已被虚拟机加载的类型信息.常量.静态变量.即时编译器编译后的代码缓存 1.类型信息 对每个加载的类型(类class.接口interface.枚举.注解)jvm必须在方法区中存储下边类型信息 这个类型的完整有效名 这个类型直接父类的完整有效名 这个类型的修饰符(public.abstract.final的某个子集) 这个类型直接接口的一个有序列表 2.方法信息 JVM必须保存所有方法的以下信息 方法名称 方法参数的数量和类型 方法的修饰符 方法的字节码.…
首先要说明的是,此文章转载自 http://blog.csdn.net/zzhangxiaoyun/article/details/7518917 谢谢作者.是本人认为对方法区解释得比较清楚的一篇文章了. 另外,这里ps一下,Class对象是存放在堆区的,不是方法区!这点很多人容易犯错.类的元数据(元数据并不是类的Class对象!Class对象是类加载的最终产品,类的方法代码,变量名,方法名,访问权限,返回值等等都是在方法区的)才是存在方法区的!Class对象可以认为是类的反射对象,所有的反射相…
1.JVM中OOP-KLASS模型 在JVM中,使用了OOP-KLASS模型来表示java对象,即:1.jvm在加载class时,创建instanceKlass,表示其元数据,包括常量池.字段.方法等,存放在方法区:instanceKlass是jvm中的数据结构:2.在new一个对象时,jvm创建instanceOopDesc,来表示这个对象,存放在堆区,其引用,存放在栈区:它用来表示对象的实例信息,看起来像个指针实际上是藏在指针里的对象:instanceOopDesc对应java中的对象实例:…
转载:https://www.jianshu.com/p/ae97b692614e?from=timeline JVM体系结构 JVM是一种解释执行class文件的规范技术.   JVM体系结构 我翻译的中文图:   中文图 类装载器子系统 在JVM中负责装载.class文件(一种8位二进制流文件,各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙,经编译器编译.java源文件后生成,每个类(或者接口)都单独占有一个class文件). 运行时数据区 方法区 当JVM使用类装载器定位cla…
一.栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个方法时,才为当前栈分配一个帧,然后将该帧压入栈 栈帧帧是由局部变量区.操作数栈和帧数据区组成 java栈上的所有数据都是私有的,任何线程都不能访问另一个线程的栈数据 局部变量区  调用方法时,类型信息确定此方法局部变量区和操作数栈的大小 局部变量区被组织为以一个字长为单位.从0开始计数的数组,类型为…
方法区 Method Area 方法区在逻辑上属于堆的一部分,但可以看做是一块独立于 Java 堆的内存空间.所有的字段和方法字节码,以及一些特殊的方法,如构造函数,接口代码在此定义.所有定义方法的信息都保存在方法区.在 JDK 8 之后,方法区移动至本地内存中. 方法区具有以下特点: 方法区与 Java 堆一样,是各个线程共享的内存区域 方法区在 JVM 启动时创建完成,并且实际内存区域和 Java 堆区一样都可以是不连续的 方法区的大小,跟堆空间大小一样,可以选择固定大小或者可扩展 方法区的…
方法区(Method Area) 在JVM中,类型信息和类静态变量都保存在方法区中,需要注意的一点是,常量池也存放于方法区中. 类型信息包括: 1.类型的全名(The fully qualified name of the type) 2.类型的父类型全名(除非没有父类型,或者父类型是java.lang.Object)(The fully qualified name of the typeís direct superclass) 3.该类型是一个类还是接口(class or an inter…
Sun/Oracle JDK的HotSpot VM中,直到JDK7都有“持久代”(Permanent Generation,简称PermGen).也称为方法区.Oracle JDK8的HotSpot VM去掉“持久代”,以“元数据区”(Metaspace)替代之. Oracle是在JDK7的时候宣布移除PermGen内存区域,但是知道JDK8才最终移除. 在JDK7之前,所谓的Permanet Generation内存区域其实包含了两个部分: 方法区 Internded String 方法区主要…
通常我们都知道在堆空间新生代Eden区满了,会触发minor GC, 在老年代满了会触发full GC, 触发full GC会导致Stop The World, 那你们知道还有一个区域满了一会触发Full GC么?而且这个区域满了会直接影响我们的开发效率. 一.方法区参数调优 我们可以对运行时数据区的内存进行参数设置. 这是jvm调优的重点. 参数的变化将影响到整体效率 核心参数设置如下: java -Xms2048M -Xmx1024M -Xss512k -XX:MetaspaceSize=2…
java堆是java应用程序最密切的内存空间.几乎所有的对象都存在堆中.java堆完全自动化管理,通过垃圾回收机制,垃圾对象会自动清理,不需要显式释放. 根据java垃圾回收机制的不同,java堆可能有不同的结构.最常见的是将整个java堆分为新生代和老年代.跟人类差不多了,老龄化就有可能找上帝去了,新生代存放新对象或者年龄不大的对象,老年代存放老年对象.新生代有可能分为eden区.s0区和s1区,s0区和s1区也被称之为 from 到to区域,他们是两块大小相等可以互换的内存空间如下图所示:…