java文件统计器代码 java文件统计器代码大全( 三 )


A)R-DFw o2X0JVM在它的生存周期中有一个明确的任务,那就是运行Java程序 , 因此当Java程序启动的时候,就产生JVM的一个实例;当程序运行结束的时候,该实例也跟着消失了 。下面我们从JVM的体系结构和它的运行过程这两个方面来对它进行比较深入的研究 。
Z6?gXm!~0Java虚拟机的体系结构
2XFZ@"I I,\0
e-i'_;P X a0刚才已经提到,JVM可以由不同的厂商来实现 。由于厂商的不同必然导致JVM在实现上的一些不同,然而JVM还是可以实现跨平台的特性 , 这就要归功于设计JVM时的体系结构了 。中文JAVA技术网{ v2TtMlG?"]*N
中文JAVA技术网,HK3YQN k
我们知道 , 一个JVM实例的行为不光是它自己的事,还涉及到它的子系统、存储区域、数据类型和指令这些部分,它们描述了JVM的一个抽象的内部体系结构,其目的不光规定实现JVM时它内部的体系结构 , 更重要的是提供了一种方式 , 用于严格定义实现时的外部行为 。每个JVM都有两种机制,一个是装载具有合适名称的类(类或是接口),叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎 。每个JVM又包括方法区、堆、Java栈、程序计数器和本地方法栈这五个部分,这几个部分和类装载机制与运行引擎机制一起组成的体系结构图为:中文JAVA技术网BW0EZCI
2o\d oz0中文JAVA技术网%K1Hl:f ~(@Y(U
图3 JVM的体系结构中文JAVA技术网0P/b(jt U$x
7{F*d8f7ySt:Q0JVM的每个实例都有一个它自己的方法域和一个堆 , 运行于JVM内的所有的线程都共享这些区域;当虚拟机装载类文件的时候,它解析其中的二进制数据所包含的类信息,并把它们放到方法域中;当程序运行的时候,JVM把程序初始化的所有对象置于堆上;而每个线程创建的时候,都会拥有自己的程序计数器和Java栈,其中程序计数器中的值指向下一条即将被执行的指令 , 线程的Java栈则存储为该线程调用Java方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈依赖于具体的实现 。中文JAVA技术网 t?!Pz!B]
"^x1MT5qj0下面分别对这几个部分进行说明 。
/}C2v7b:]%vo[|0中文JAVA技术网'z/@1RG7[E1`8B
执行引擎处于JVM的核心位置 , 在Java虚拟机规范中,它的行为是由指令集所决定的 。尽管对于每条指令 , 规范很详细地说明了当JVM执行字节码遇到指令时,它的实现应该做什么,但对于怎么做却言之甚少 。Java虚拟机支持大约248个字节码 。每个字节码执行一种基本的CPU运算,例如,把一个整数加到寄存器,子程序转移等 。Java指令集相当于Java程序的汇编语言 。中文JAVA技术网 ^sH2X*b,Z
q3[ OT`z"M4V0Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据 。许多指令没有操作数,仅由一个单字节的操作符构成 。
P.R.Uxbfc0
o"o qq9_0虚拟机的内层循环的执行过程如下:中文JAVA技术网3Hn8B r,xE
MjHj(zBG t"m P0do{
l$Iz V!M9[0取一个操作符字节;中文JAVA技术网7[?3o?,v A|3b+O R
根据操作符的值执行一个动作;
I(^e)G)Hf6`0}while(程序未结束)中文JAVA技术网y}0J/|:so
中文JAVA技术网c|%L(ud
由于指令系统的简单性,使得虚拟机执行的过程十分简单,从而有利于提高执行的效率 。指令中操作数的数量和大小是由操作符决定的 。如果操作数比一个字节大,那么它存储的顺序是高位字节优先 。例如,一个16位的参数存放时占用两个字节,其值为:
0H.w`wb}.X0中文JAVA技术网y{X;n.u4PT+e)D7\E
第一个字节*256+第二个字节字节码 。中文JAVA技术网"V[]J!_0v+D

推荐阅读