Java类编译、加载、和执行机制
标签: java 类加载 类编译 类执行 机制
0.前言
个人认为,对于JVM的理解,主要是两大方面内容:
Java类的编译、加载和执行。
JVM的内存管理和垃圾回收机制。
本文主要是以概要的形式学习第一点:类的编译、加载和执行。关于内存管理机制请看另外一篇文章JVM的内存管理和垃圾回收机制。
1. Java类的编译过程
这是由*.java源码文件转为 .class二进制字节码文件的过程。
我们编写好的源代码,就是.java文件。使用“javac test.java”就可以编译test.java文件。
编译过程主要有三步:
词法分析和输入到符号表
注解处理
语义分析和生成字节码
详细过程:
源代码文件*.java -> 词法分析器 -> tokens流 -> 语法分析器 -> 语法树/抽象语法树 -> 语义分析器 -> 注解抽象语法树 -> 字节码生成器 -> JVM字节码文件*.class
最后剩成的JVM字节码文件,使用命令“javap -c test”可以查看test.class的字节码信息,主要包含三项内容:
结构信息:class文件相关信息。
元数据:Java源码中的声明和常量信息。
方法信息:Java源码语句和表达式对应的字节码。
2. 类加载机制
2.1 类加载器分类
类加载器其实也是Java类。有四大类:
根加载器Bootstrap Class Loader
扩展加载器Extensio