Java虚拟机原理
1、编译机制 分析和输入到符号表: 词法分析:将代码转化为token序列 语法分析:由token序列生成抽象语法树 输入到符号表:将类中出现的符号输入到类的符号表 注解处理: 处理用户自定义注解,之后继续第一步 根据符号表进行语义分析并生成class文件,并进行相关优化 虚拟机数据类型、字节码文件格式、虚拟机指令集 2、执行机制 2.1、加载、链接、初始化 2.1.1、加载 双亲委派、线程上下文类加载器、Web容器、OSGi: http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 2.1.2、链接 校验:校验二进制字节码格式是否符合Java Class File Format规范 准备:为类的静态属性分配内存和默认值,并加载引用的类或接口 解析:将运行时常量池中的符号引用替换为直接引用(静态绑定) 2.1.3、初始化 类的初始化时机: 创建类的实例 初始化某个类的子类(满足主动调用,即访问子类中的静态变量、方法) 反射(Class.forName()会触发,ClassLoader.loadClass()及X.class不会触发) 访问类或接口的静态变量(static final常量除外,static final变量可以) 调用类的静态方法 java虚拟机启动时被标明为启动类的类 初始化顺序: 父类静态成员、静态代码块