您的位置:首页 > 编程语言 > Java开发

Java虚拟机学习笔记1-内存区域

2013-08-11 15:49 99 查看


1.方法区:(非堆区)存储类信息(版本,字段,方法,接口,常量(类加载后存储在运行时常量池中),静态变量),即时编译器编译后的代码
运行时常量池:存储常量信息,主要是这个东东具有动态性,即在程序运行期间可以动态往里面插入常量。比如String类的intern函数。
2.:存储对象,数组

3.虚拟机栈:存储栈帧

栈帧:每call一个方法,就创建一个栈帧,里面包含局部变量表,操作栈,动态链接,方法出口等信息

局部变量表:存储基本数据类型(int,long,double...),对象引用reference,returnAddress类型。64位点long和double占用两个slot,其余均只占用一个slot。

对象引用:有句柄实现方式和直接指针实现方式。

句柄实现方式:reference指向java堆中的句柄池,每个对象的句柄包含两个指针(指向java堆中实例池中的对象实例以及指向方法区中的对象类型)。

优点:当垃圾收集时,移动对象只涉及修改句柄指针,reference不用修改



直接指针实现方式:reference指向java堆中的对象,对象包含实例数据以及一个指向方法区中对象类型点指针。

优点:访问对象实例速度快,相比句柄,少了一次指针定位。



4.本地方法栈:用于调用本地方法存储相关信息。在sun的hotspot虚拟机中,虚拟机栈和本地方法栈合二为一共用虚拟机栈。

5.程序计数器:字面意思,占用很小的一点点内存。

6.直接内存:虚拟机以外的内存,通过调用本地方法申请。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: