《(精品)jvm简介.ppt》由会员分享,可在线阅读,更多相关《(精品)jvm简介.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、jvm当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后,把这些信息放到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。当每一个新的线程被创建时,它都将得到它自己的pc寄存器(程序计数器)以及一个java栈:如果线程正在执行的是一个Java方法(非本地方法),那么PC寄存器的值将总是指示下一条将被执行的指令,而它的java栈则总是存储该线程中java方法调用的状态-包括它的局部变量,被调用时传进来的参数,它的返回值,以及运算的中问结果等等。java栈是由许多栈帧(stack frame 或者说帧(frame)组成的,一个栈帧
2、包含一个Java方法调用的状态。当线程调用一个Java方法时,虚拟机压入一个新的栈帧到该线程的java栈中:当该方法返回时,这个栈帧被从java栈中弹出并抛弃。Java虚拟机为美一个线程创建的内存区都是私有的,任何线程都不能访问另外一个线程的pc寄存器或者java栈。Java虚拟机有两种类装载器:启动类装载器和用户自定义类装载器。前者是Java虚拟机实现的一部分。后者则是Java程序的一部分。由不同的类装载器装载的类将被放在虚拟机内部的不同命名空间中。在Java虚拟机中关于被装载类型的信息存储在一个逻辑上被称为方法区的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后
3、读人这个class文件一个线性二进制数据流然后将它传输到虚拟机中、紧接着虚拟机提取其中的类型信息,并将这些信息存储到方法区。该类型中的类静态)变量同样也是存储在方法区中。类型信息对每个装载的类型,虚拟机都会在方法区中存储以下类型信息:这个类型的全限定名。这个类刑的直接超类的全限定名(除非这个类型是java.lang.Object,它没有超类)这个类型是类类型还是接口类型这个类型的访问修饰符(public,abstract或fi nal的某个子集)。任何直接超接口的全限定名的有序列表。该类型的常量池。字段信息。方法信息。除了常量以外的所有类(静态)变量。一个到类ClassLoader的引用。一个
4、到Class类的引用。常量池虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用常量的一个有序集合。包括直接常量string、integer和floating point常量)和对其他类型、字段和方法的符号引用。池中的数据项就像数组一样是通过索引访问的。因为常量池存储了相应类型所用到的所有类型、字段和方法的符号引用,所以它在Java程序的动态连接中起着核心的作用。字段信息对于类型中声明的每一个字段,方法区中必须保存下面的信息。除此之外,这些字段在类或者接口中的声明顺序也必须保存。下面是字段信息的清单:字段名。字段的类型。字段的修饰符 方法信息对于类型中声明的每一个方法,方法区中必须
5、保存下面的信息。和字段一样些方法在类或者接口中的声明顺序也必须保存。下面是力一法信息的清单:方法名。方法的返回类型(void)方法参数的数量和类型(按声明顺序)。方法的修饰符(pubiic,private,protected,static,final,synchronised,native,abstract的某个子集)。方法的字节码(bytecodes)。操作数栈和该方法的栈帧中的局部变量区的大小。异常表方法表为了尽可能提高访问效率,虚拟机对每个装载的非抽象类,都生成一个方法表,把它作为类信息的一部分保存在方法区。方法表是一个数组,它的元素是所有它的实例可能被调用的实例方法的直接引用,包括那些从超类继承过来的实例方法。栈帧栈帧由三部分组成:局部变量区,操作数栈和帧数据区。帧数据区:java栈帧还需要一些数据来支持常里池解析、正常方法返回以及异常派发机制。这些信息都保存在Java栈帧的帧数据区中。