(1)由类装载器(class loader)负责把类文件(.class文件)加载到Java虚拟机中。在此过程需要检验该类文件是否符合类文件规范。
(2)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如Applet程序中写本地计算机文件系统的操作。
(3)如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。
java生成字节码文件全过程:
Java 源码编译由以下三个过程组成:
1、分析和输入到符号表
2、注解处理
3、语义分析和生成class文件
流程图如下所示:
最后生成的class文件由以下部分组成:
结构信息。包括class文件格式版本号及各部分的数量与大小的信息
元数据。对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池
方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息
1、表达不同
源代码是源代码。字节码称为字节码。它是源程序文件生成的类文件,在通过Java编译器后使用扩展名java生成。它的扩展是类。
2、角色是不同的
字节码是包含可执行程序的二进制文件,该可执行程序由一系列操作码/数据对组成。字节码是一种中间代码,它比机器代码更抽象,需要翻译器转换成机器代码的中间代码。无论硬件环境如何,字节码主要用于实现特定的软件操作和软件环境。字节码的实现是通过编译器和虚拟机实现的。
这是我们根据Java语言规范编写的源程序文件,扩展名为java。
3、用法不同
字节码是中间状态(中间代码)的二进制代码(文件)。您需要将解释器转换为机器代码。写入运行操作(WORA)实际上是由字节码实现的。
通常它已经编译,但它与特定的机器代码无关。字节码通常不像源代码那样可读,而是一系列编码数字常量,引用,指令等。