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

时间:2022-12-27 12:43:00
 Java虚拟机学习笔记1-内存区域 1.方法区:(非堆区)存储类信息(版本,字段,方法,接口,常量(类加载后存储在运行时常量池中),静态变量),即时编译器编译后的代码 运行时常量池:存储常量信息,主要是这个东东具有动态性,即在程序运行期间可以动态往里面插入常量。比如String类的intern函数。

2.:存储对象,数组

3.虚拟机栈:存储栈帧

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

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

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

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

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

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

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

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

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

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

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

6.直接内存:虚拟机以外的内存,通过调用本地方法申请。