|
发表于 2024-11-1 16:02:47
|
显示全部楼层
Java类加载是Java虚拟机(JVM)将类文件加载到内存中并准备执行的过程。这个过程分为以下几个阶段:
1. **加载(Loading)**:
- **查找和导入类文件**:JVM通过类加载器(ClassLoader)查找类文件。类加载器可以从文件系统、网络等多种来源加载类。
- **生成类的二进制数据**:将类文件的二进制数据读入内存。
- **创建Class对象**:在方法区中为类创建一个`java.lang.Class`对象,表示该类的所有信息。
2. **链接(Linking)**:
- **验证(Verification)**:确保类文件的字节码符合JVM规范,保证安全性和正确性。
- **准备(Preparation)**:为类的静态变量分配内存,并将其初始化为默认值。
- **解析(Resolution)**:将常量池中的符号引用替换为直接引用。这一步可能会在初始化阶段延迟进行。
3. **初始化(Initialization)**:
- 执行类构造器`<clinit>()`方法。这个方法是由编译器自动收集类中的所有静态变量的赋值动作和静态代码块中的语句合并产生的。
4. **使用(Using)**:
- 类加载完成后,JVM可以使用该类进行实例化、调用其方法等操作。
5. **卸载(Unloading)**:
- 当类不再被使用时,JVM的垃圾收集器会回收类的内存。
### 类加载器(ClassLoader)
Java中有三种主要的类加载器:
- **启动类加载器(Bootstrap ClassLoader)**:负责加载JDK中的核心类库。
- **扩展类加载器(Extension ClassLoader)**:负责加载扩展类库。
- **应用程序类加载器(Application ClassLoader)**:负责加载用户类路径上的类。
类加载器采用双亲委派模型,即一个类加载请求会先委托给父类加载器,只有在父类加载器无法加载时,才会尝试自己加载。
这种机制确保了Java核心类库的安全性和稳定性,避免了用户自定义类与核心类库的冲突。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|