JAVA文件的加载与执行
java文件的加载与执行分为编译阶段和运行阶段,如下图:

一、编译阶段
编译阶段执行javac命令可以将源文件(以.java结尾)翻译成字节码文件(以.class结尾)。
注:
1. java源文件中有且仅有一个public类,且要求该类名与文件名相同(可以没有)。
2. javac编译源文件时,可以指定字符集和字节码文件生成位置,例如:
javac -encoding UTF-8 -d d:com/taz/test XX.java
3. 现在生成的字节码文件由JVM来执行,不受操作系统的影响,即编译后生成的字节码文件已具有跨平台的特性。
二、运行阶段
运行阶段使用java命令启动JVM虚拟机,JVM会启动类加载器,将字节码文件翻译成二进制文件,最终交给底层操作系统,由操作系统与硬件交互。
三、类加载的过程
1.装载(loading):
JVM启动类加载器后,类加载器负责将字节码文件读入内存,并创建对应的Class对象。
主要的类加载器有三个:BootstrapClassLoader负责加载核心类库,PlatformClassLoader负责加载扩展类库,AppClassLoader负责加载配置好的classpath中的类(我们自己写的)
2.链接(linking):
1)验证:检查加载类的信息是否符合JVM规范。
2)准备:该步骤正式为静态变量在方法区中开辟存储空间并设置默认值。
3)解析:将虚拟机常量池内的符合引用(类名,变量名等)替换为直接引用(内存地址)。
3.初始化(initialization):
给静态变量赋值,执行静态代码块
四、类加载过程中使用的双亲委派机制
某个类加载器接收到加载类的任务时,通常会委托给 “父-类加载器” 加载。当最高的 “父-类加载器” 无法加载时,又会向下层级委托加载。


浙公网安备 33010602011771号