您的位置:首页 > 其它

浅谈JVM体系结构

2014-09-19 10:44 330 查看
1、JVM简介

JVM(Java Virtual Machine),Java虚拟机是在计算机上虚拟出来的机器,但这种虚拟你是看不到的,它是内存中的虚拟机。

2、JVM的组成部分

首先看JVM在机器中的位置,如下图:




从上图可以看到,JVM是运行在操作系统之上的,与硬件没有直接交互。接下来JVM的组成部分。




(1)Class Loader 类加载器

Class Loader的作用是加载类文件到内存中,在这里不对类加载器展开描述。类加载器只负责加载符合类文件结构的类文件到虚拟机中,具体的执行是由Execution Engine执行引擎负责的。

(2)Excution Engine 执行引擎

执行引擎室负责解释命令的,并提交操作系统执行。

(3)Native Interface 本地接口

提供Java与其他编程语言的交互的API。

(4)Runtime Data Area 运行数据区

这是JVM的重要组成部分,所有的java程序被加载到这里。

3、JVM的内存管理

(1)Stack

Stack栈是Java程序的运行区,在线程创建时创建,生命周期与线程相同。栈中的数据存储格式是栈帧(Stack Frame)。栈帧是一个内存区块,是一个有关方法和运行期数据的数据集。其格式如下:




从上图中可以看出,栈帧中主要保存三种数据:输入输出参数,本地变量以及方法内的变量。上图中有两个栈帧,栈帧2是先被调用的方法,首先入栈,在栈帧2的方法内调用了方法1,则方法1对应的栈帧1也入栈,执行完毕后,依次弹出栈帧1和栈帧2,当线程结束后,栈释放内存。

(2)Heap

Heap堆内存在jvm中只存在一个实例。对内存分为3个区域,如下图:




(a)新生代

新生代是类创建、成长和死亡的区域,一个类在这里产生,使用,最后被gc,结束生命。新生代分为两个部分:Eden Space和两个Survivor区域。当Eden Space空间用完时,JVM将此区域仍然存活的对象移动到Survivor 0 区域,然后对Eden Space进行垃圾回收,当Survivor 0 满时,存活对象移动到Survivor 1,当Survivor 1 慢时,则把仍然存活的对象移动到Tenured Space 老年代中。

(b)老年代

存放从新生代中筛选后的java对象。

(c)持久代

持久代是一个常驻内存区域,用于存放JDK本身所携带的Class等元数据,被加载进来的数据时不会被gc的,随JVM的关闭而是否内存。

(3)Method Area

方法区是被所有线程共享。

(4)PC Register

每个线程有一个程序计数器,指向方法区中的方法字节码,由执行引擎读取下一条指令。

(5)Native Method Stack

本地方法栈是为虚拟机使用到的native方法服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: