JAVA文件的加载与执行

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

image

一、编译阶段

编译阶段执行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):

给静态变量赋值,执行静态代码块

四、类加载过程中使用的双亲委派机制

某个类加载器接收到加载类的任务时,通常会委托给 “父-类加载器” 加载。当最高的 “父-类加载器” 无法加载时,又会向下层级委托加载。
image

posted @ 2025-05-07 00:29  小心二次元T4z  阅读(14)  评论(0)    收藏  举报