版本 1.1中因为java.lang.ClassLoader的loadclass()为抽象方法,因此自定义类装载器时必须创建classLoader子类并且实现loadclass()。
步骤:
1、自定义类装载器构造方法传递basepath,loadclass()将在这个目录下搜索请求的类型
2、调用findloadedclass(classname) ,判断该类型是否已经被加载,如果加载,直接返回当前类型
3、调用findsystemclass(classname),判断原始类装载器是否已经装载了这个类型。如果已经装载,则直接返回该类型。
4、if(classname.startwith("java.")),这个判断可以防止标准的java包被除了启动类装载器的其他类装载器装载。
5、根据basepath+classname寻找对应的class文件,并将其转换为字节数组。
6、调用defineclass(classname,类字节数组,0,字节数组长度),解析二进制数据为内部数据格式,并且创建一个class实例。defineclass会确定所有的超类型已经被装载,该实现过程是递归的。
7、defineclass()成功以后,loadclass(String classname,Boolean resolved)中判断resolved是否为true,如果为false则调用resolveclass(defingclass()生成的class)。
版本1.2中loadclass为已经实现的方法,自定义类装载器必须创建classLoader子类,可以选择重写loadclass()也可以选择实现findclass()。推荐使用findclass().
总体步骤一致,在defineclass()中可以指定保护域。
1、调用findloadedclass(classname) ,判断该类型是否已经被加载,如果加载,直接返回当前类型
2、否则委派到这个类装载器的双亲装载器,返回class实例
3、否则调用findclass(),findclass()试图生成一个字节数组,内容采用java class文件格式。如果成功,findclass()就会把这个字节数组传给defineclass(),后者试着导入这个类型。返回class实例
分享到:
相关推荐
《JVM类装载器原理详解》 Java的JVM(Java Virtual Machine)类装载器是Java运行时系统的重要组成部分,负责在程序运行期间查找并加载类的二进制数据。理解类装载器的工作原理对于优化Java应用性能和实现动态加载类...
编写自定义类装载器时,你可能会遇到的问题包括类的加载顺序、类的可见性、类的唯一性以及如何处理加载失败的情况等。这些问题都需要在设计和实现时仔细考虑。 通过实践编写自己的类装载器,不仅可以加深对JVM内部...
5. **自定义类装载器**:开发者可以根据需求编写自己的类装载器,用于加载特定路径或者网络上的类,例如在模块化系统中加载不同模块的类。 6. **类的生命周期**:类装载器不仅负责加载类,还参与类的初始化、使用和...
此外,还可以自定义类装载器以满足特定需求,比如热部署(Hot Deployment)、模块化加载等。 #### 动态性的应用实例 - **热部署(Hot Deployment)**:在不重启服务器的情况下更新部署的应用程序或服务。例如,在...
Java的类装载器分为两大类:启动类装载器(Bootstrap ClassLoader)和用户自定义装载器(User-Defined Class Loader)。 - **启动类装载器**:由JVM自身实现,主要负责加载JDK的核心类库,如rt.jar中的java.lang.*...
开发者可以通过自定义类装载器来满足特定的应用场景,例如加载特定版本的库或实现特定的加载策略。 总结来说,Java类装载器机制是Java平台的核心特性之一,它确保了代码的动态加载和隔离,使得J2EE应用服务器能够...
- **动态加载**:通过自定义类装载器,可以在运行时动态加载新的类,实现插件系统或热部署。 - **隔离模块**:不同的类装载器可以加载相同类的不同版本,实现类的隔离,比如Tomcat容器中的Web应用隔离。 - **安全性*...
所有JVM都内置了一个特殊的类装载器——根装载器(Bootstrap ClassLoader),它负责装载Java核心类库。当需要装载非设计时已知的类时,则需要使用用户自定义的类装载器。 #### 实例演示 以下是一个简单的示例,...
JVM加载class文件的原理机制是Java中的核心机制之一,由于Java中的所有类必须被装载到JVM中才能运行,这个装载工作是由JVM中的类装载器完成的。类装载器所做的工作实质是把类文件从硬盘读取到内存中。 类加载机制 ...
- 系统类装载器是JVM内置的,用于加载Java标准库的类。 理解类装载机制对于优化程序性能、实现动态加载、插件系统以及增强程序的灵活性具有重要意义。例如,通过自定义类装载器,开发者可以在运行时替换或添加新的...
理解类装载器的工作原理有助于理解类的加载、链接和初始化过程,以及自定义类装载器的应用。 3. **JVM配置参数** (3.常用JVM配置参数.pptx) JVM的配置参数对于调整性能至关重要,如-Xms、-Xmx用于设置堆内存大小,...
2. 用户自定义类装载器:Java 程序的一部分,必须是 ClassLoader 类的子类。 类装载器的方法 1. defineClass:将二进制 class 文件导入到方法区。 2. findSystemClass:通过类型的全限定名,先通过系统类装载器...
JVM有三个层次的类装载器:引导类装载器(Bootstrap ClassLoader)、扩展类装载器(Extension ClassLoader)和应用类装载器(Application ClassLoader)。用户还可以自定义类装载器。 通过学习本教程,你将掌握如何...
它们遵循双亲委托模型,确保类的唯一性,并允许开发者自定义装载逻辑。 3. 运行数据区: - 方法区:存储已装载类的信息,包括常量、静态变量、方法元数据。 - 堆内存:所有对象实例和数组都在堆中分配内存,是...
1. 类装载器:类装载器负责加载.class文件到JVM中,分为引导类装载器、扩展类装载器和应用类装载器,以及用户自定义的类装载器。了解类装载过程(加载、验证、准备、解析和初始化)对于理解类的生命周期至关重要。 ...
启动类装载器是JVM的一部分,负责加载基础的Java类库,而用户自定义类装载器则允许程序员按需加载自定义的类。 Java的动态连接特性使得其容易被反编译,因为类间的引用是符号化的,包含了大量的元数据,如字段名、...