浅谈JVM体系结构

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)。栈帧是一个内存区块,是一个有关方法和运行期数据的数据集。其格式如下:

          浅谈JVM体系结构_第1张图片

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

      (2)Heap

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

          浅谈JVM体系结构_第2张图片

          (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方法服务。

 


你可能感兴趣的:(JVM,深入Java虚拟机)