现在的位置: 首页 > 综合 > 正文

JVM学习(二)

2014年11月23日 ⁄ 综合 ⁄ 共 984字 ⁄ 字号 评论关闭

 

JVM学习(二)

JVM的结构,上图:

     

每个java程序 都 运行在它自己的JVM实例中。

虚拟机基本类型包括基本类型与引用类型。

      当编译器把Java源代码编译成bytecode时,它会用int或byte来表示boolean,涉及boolean值的操作则会使用int。

      虚拟机内部还有一个基本类型returnAddress,用来实现 java程序中的finally子句。

下面对JVM结构中的组成部分进行一个简单的描述:

ClassLoader子系统

      对于每一个被装载的类型,JVM都 会为其创建一个Class实例来代表该类型。

Method Area——存储被装载的类型信息

      此内存区被所有的线共享,大小不必是固定的,也不必是连续的,可以被 gc。

      类型信息包括:

           这个类型的全限定名

           直接超类的全限定各

           是类还是接口

           访问修饰符

           任何直接超接口的全限定名列表

           常量池:存储直接常量与对其它类型、字段和方法的符号引用

           字段信息

           方法信息

           类变量

           一个到类ClassLoader对象的引用

           一个到类Class对象的引用

           还可能存在一个方法表

Heap——存储对象与数组,实例变量也存储与此

      虚拟机必须能够通过对象引用访问相关的类型信息,因此在对象中通常会有一个指向 Method Area的指针。此内存区也是线程间共享的。

PC——每个线程都有自己的PC,其存储下一条指令的地址。如果该线程正在执行一个native method,那么 PC值是“undefined”。

Java Stack——第启动一个线程,JVM就会为其分配一个java statck,用来存储该线程中Java方法的调用状态。在javastatck中,方法的调用状态用栈帧(Frame)来表示。栈帧由 局部变量区,操作数栈和帧数据区三部分组成。之所以说JVM的运行方式 是基于栈的是因为JVM的指令是从操作数栈中而不是从寄存器中取得操作数的。

Execution Engine子系统——JVM实现的核心 。每个线程拥有一个Execution Engine实例,用来执行字节码。

抱歉!评论已关闭.