java代码的执行机制(分布式java应用笔记)

先看看jvm规范定义的标准结构:

首先我们看看类文件是如何被编译生成的。
    
从上图中可以看出通过javac编译代码分为3个步骤。我们再来分析这3个步骤:
1,分析和输入到符号表(Parse and Enter)
Parse的过程为词法和语法分析。词法分析完成的是将代码字符串转变为token序列;语法分析完成的是根据语法由token序列生成抽象语法树。
Enter过程将符号输入到符号表。通常包括确定类的超类型和接口,根据需要添加默认的构造器,将类中出现的符号输入到自身的符号表中。
2,注解处理(Annotation Processing)
改步骤用于处理用户自定义的annotation。
3,语义分析和生成class文件(Analyse and Generate)
Analyse步骤基于抽象语法树进行一系列的语义分析,包括将语法树中的名字,表达式等元素与变量,方法,类型等联系到一起;将泛型转换为普通java;消除无用的代码(if(false){...});检查性工作等。
Generate通过(com.sun.tools.javac.jvm.Gen)生成class文件。
 
class文件包含的信息为:结构信息(包括class文件格式的版本号及各部分的数量与大小的信息),元数据(对应声明与常量的信息),方法信息。
 
类加载机制:装载,链接,初始化。
然后我们再来看类加载机制。
load(装载)将二进制字节码加载到jvm中。
link(链接)负责对二进制字节码的格式进行校验,初始化装载类中的静态变量及解析类中调用的接口和类。
initialize(初始化)执行类中的静态初始化代码,构造器代码和静态的属性代码,在以下4中情况下初始化过程会被触犯执行:
1,调用了new
2,反射调用了类中的方法
3,子类调用了初始化
4,jvm启动过程中指定的初始化类。
关于类加载机制准备用另一篇文章来说明。
 
类的执行机制:
在源码编译阶段将源码编译为jvm字节码,jvm字节码是一种中间代码的方式,要由jvm在运行期对其进行解释并执行,这种方式称为字节码解释执行方式。
编译执行:
解释执行的效率比较低,jdk支持将字节码编译为机器码的功能。编译在运行市进行,通常称为jit编译器。
对执行频率高的代码进行编译,对执行频率不高的代码继续采用解释的方式进行所以又称为hotspot vm。
 
反射执行:reflect,你懂的。
需要注意的是getMethod方法比较豪性能,一方面是由于权限的校验,另一方面是所有方法的扫描及method对象的复制,因此在使用反射调用多的系统中应缓存getMethod返回的Method对象。而method.invoke的性能仅比直接调用低一点。
 
 
 
 
 
 
 
posted @ 2013-02-23 14:53  sqtds  阅读(1068)  评论(0编辑  收藏  举报