Java xxx
我们在命令行下敲入:“java xxx”后会发生什么呢?
流程如下:
1. 定位 JRE;
2. 定位JVM;
3. 启动JVM,并进行初始化;
4. 产生Bootstrap Loader;
5. 载入ExtClassLoader;(Ext – Extended)
6. 载入AppClassLoader;
7. 加载xxx类。
书中提到Bootstrap Loader、ExtClassLoader和AppClassLoader构成了Java的“类加载器继承体系--class loader hierarchy”,其中Bootstrap Loader是由C++编写的,其他两个是由Java写的。之所以成为“继承体系”是因为这三个loader之间是有联系的。Bootstrap Loader负责加载ExtClassLoader,后者ExtClassLoader就将其parent置为Bootstrap Loader。AppClassLoader较为特殊,虽然由Bootstrap载入,但是其parent却置为ExtClassLoader。其原因是为了实现“委托模型”。简述“委托模型”就是当类加载器有加载类的需求时,会先请求其parent使用其搜索路径帮助加载,如果其parent找不到,才使用自己的搜索路径进行加载。如上述所说当ExtClassLoader想载入AppClassLoader类时它首先请求其parent “Bootstrap Loader”帮忙,Bootstrap Loader将AppClassLoader载入后,由于这个载入是ExtClassLoader请求的,所以AppClassLoader的parent还是置为ExtClassLoader而不是Bootstrap Loader。
见下图:
类的加载流程
类加载的时候遵循一个原则:“类加载器会依类的继承体系从上至下依次加载”。举个例子:“如果C继承了B并实现了接口I,而B有继承自A”,则类加载器在加载C时,加载的次序会是AàBàIàC,(注:interface会如同class一样被Java编译器编译为独立的.class文件)
其实我对底层的东西并未给与太多的关注,如果在哪个项目中需要我去了解底层的话,我会去很好的学习。
- 大小: 34.9 KB
- 大小: 139.5 KB
分享到:
相关推荐
Java 类装载过程是Java虚拟机(JVM)运行的核心机制之一,主要涉及到类从加载到初始化的完整生命周期。这一过程确保了程序的正确运行,并在安全性方面起到关键作用。以下是详细的解释: 1)装载(Loading): 在这...
`loadClass`是类装载的入口点,根据指定的类名加载类,`defineClass`将字节码转换为Class对象,`findSystemClass`用于加载系统类,`resolveClass`解析已加载的类,`findLoadedClass`检查类是否已经加载。 自定义...
装载过程包括三个主要步骤:装载、链接和初始化。装载阶段,类装载器依据指定的全限定类名(如`java.lang.Object`)去寻找对应的二进制数据。这个过程可能来源于源代码编译后的字节码文件,也可能来自于网络或其他...
##### 装载过程简介 **装载**是指将类或接口的二进制形式(通常为`.class`文件)导入到JVM中,并创建相应的`Class`对象的过程。这个过程通常包括三个主要步骤:装载、链接和初始化。 - **装载**:查找并导入类或...
在装载过程中,JVM会查找和导入类或接口的二进制数据;在链接过程中,JVM会执行校验、准备和解析步骤,其中解析步骤是可以选择的;在初始化过程中,JVM会激活类的静态变量的初始化Java代码和静态Java代码块。 在...
JVM加载class文件的原理机制是Java中的核心机制之一,由于Java中的所有类必须被装载到JVM中才能运行,这个装载工作是由JVM中的类装载器完成的。类装载器所做的工作实质是把类文件从硬盘读取到内存中。 类加载机制 ...
1. **装载过程** 装载过程是类装载机制的第一步,主要包括以下子步骤: - **查找**:根据类名(全限定名)在指定的类路径(ClassPath)中找到对应的.class文件。 - **导入**:读取类文件的字节流,通常由类加载器...
Java中的所有类都必须先被装载到JVM中才能被执行,这个过程由JVM内的类装载器(ClassLoader)来完成。类装载器的工作是将类文件从硬盘读取到内存中,使得JVM能够识别和执行这些类。 Java类大致分为三类:系统类、...
类装载过程不仅涉及基本的类查找和导入,还包含了链接、验证、准备、解析和初始化等多个阶段,这些步骤确保了Java程序的安全性和可靠性。 1. **装载过程**: - **装载**:这个阶段主要是寻找指定的类或接口的二...
1. **Class文件的结构检查**:在类装载时执行,主要检查Class文件的内部结构是否符合标准,以保证文件的安全编译。 2. **类型数据的语义检查**:在连接过程中进行,确保类型数据遵循Java语言的语义规则。 3. **字节...
装载过程中,类加载器会根据全限定名找到对应的.class文件,然后读取字节码并转换为Class对象。 5. **反射与动态装载** Java反射API提供了一种在运行时检查类、接口、字段和方法的能力。通过反射,我们可以在运行...
class Loading { friend int MaxLoading(int [],int,int,int []); private: void Backtrack(int i); int n; // 物品总数 int *x; // x[i] = 1 表示第 i 个物品被选中,x[i] = 0 表示未选中 int *bestx; // ...
在学习过程中,可能会遇到一些混淆的问题,比如类装载器的委托模型、类的加载顺序以及如何自定义类装载器以加载非标准路径的类。理解这些概念有助于解决实际开发中遇到的类加载问题,例如,当需要加载外部库或者...
class MaxLoading { // 类成员变量定义... // 构造函数、成员函数实现... // 回溯法完成装载问题 void loading1(int i) { if (i > n) { // 如果已经全部遍历过 bestWeight = boatWeight; for (int j = 1; j ...
本文将详细介绍如何通过自定义类装载器来动态加载并启动类的过程,同时介绍一个简单的位移加密算法和非运算加密算法,以及如何使用这些算法进行文件的加密与解密。此方法不仅加深了我们对于Java类装载机制的理解,...
这一过程涉及到了四个主要角色:类装载器(ClassLoader)、类的二进制表示、验证(Verification)、准备(Preparation)以及初始化(Initialization)。下面我们将逐一解析这些环节。 1. **类装载器**: 类装载器...
在深入理解JVM的过程中,编写自己的类装载器(ClassLoader)是一个非常实用且有趣的实践。这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态...