【 类加载器简介】
类加载器(classloader)用于将类的class文件加载到JVM虚拟机。 JVM有三种加载器,引导类加载器器(bootstrap classloader)、扩展类加载器(extensions classloader)和应用类加载器(application classloader),另外还可以继承java.lang.ClassLoader类创建自定义加载器。
【类加载器种类】
1. 引导类加载器(BootStrap):并不是一个Java类,采用C++语言编写、内嵌在JVM内核里面,使用JNI(Java Native Interface)调用native代码执行。 引导类加载器负责加载核心的Java 类库,比如位JAVA_HOME/jre/lib下面的rt.jar文件,该jar文件包含一些常见类如:
java.lang.System java.util.HashMap
2. 扩展类加载器(ExtClassLoader):继承自java.lang.ClassLoader类,用于加载扩展路径下面的jar文件,扩展路径为JAVA_HOME/jre/lib/ext
3. 应用类加载器(AppClassLoader):继承自java.lang.ClassLoader类,用来加载classpath下面的类。
【类加载器的委托机制】
1. 当应用程序需要加载一个类时,会按照BootStrap、ExtClassLoader、AppClassLoader的顺序, 到相应的路径下面加载需要的类的字节码文件。
2. 我们可以把自定义的类编译为class文件后打成jar包,放置到JAVA_HOME/jre/lib/ext路径。 类加载器加载时,将使用ExtClassLoader加载器从JAVA_HOME/jre/lib/ext路径加载,而不会 使用AppClassLoader加载器到classpath下加载。
3. 在按照BootStrap、ExtClassLoader、AppClassLoader顺序使用类加载器,尝试加载类都失败之后,将抛出类找不到异常:java.lang.ClassNotFoundException
【应用demo】
1. BootStrap:使用C++编写、嵌入在JVM内核、并不是一个Java类。
ClassLoader loader = System.class.getClassLoader(); System.out.println(loader); //null
2. AppClassLoader:使用AppClassLoader加载器加载classpath下面的类。
ClassLoader loader = ClassLoaderTest.class.getClassLoader(); System.out.println(loader.getClass().getName()); //sun.misc.Launcher$AppClassLoader
3. ExtClassLoader:用于加载JAVA_HOME/jre/lib/ext路径下的Java类,一旦找到将不会到classpath加载。
编写自定义Hello类,打成jar包进行导出到C:\Program Files\Java\jdk1.7.0\jre\lib\ext\excelsoft.jar路径。
ClassLoader loader = Hello.class.getClassLoader(); System.out.println(loader.getClass().getName()); //sun.misc.Launcher$ExtClassLoader
===============================
类加载器是一个相对比较复杂的话题,仅作入门了解!
相关推荐
在深入探讨JVM(Java虚拟机)的理论与实践结合时,...通过"理论与实践结合 解密JVM-day02"的学习,我们将不仅了解JVM的基本概念,还能掌握其在实际应用中的调优技巧,为开发高性能、低内存消耗的Java应用打下坚实基础。
再者,类加载器与JVM的交互是通过反射实现的。通过`java.lang.ClassLoader`的`loadClass()`方法,我们可以动态加载类并执行相关操作。反射使得程序在运行时能够动态获取类的信息并进行操作,大大增强了代码的灵活性...
1. 类加载器:负责加载类文件到JVM内存中。 2. 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 3. 执行引擎:解释器或即时编译器,负责执行字节码。 4. 本地方法接口:用于调用原生方法。 5. ...
在本书中,作者不仅涵盖了JVM的基本概念,还深入探讨了JVM的高级特性,包括内存管理(如垃圾收集器)、类加载机制、线程管理、编译优化(如Just-In-Time编译,JIT)以及性能调优等方面。通过对JVM内部工作机制的解析...
2. **类加载机制**:JVM通过类加载器将.class文件加载到内存中,形成运行时数据区的类元数据。了解类加载过程(加载、验证、准备、解析、初始化)和双亲委派模型,有助于定制类加载逻辑和实现热部署。 3. **内存...
类加载器是这一过程的关键,它负责找到并加载类文件到JVM中。双亲委托模型是类加载的默认策略,保证了类加载的有序性和安全性。 再者,垃圾回收(Garbage Collection, GC)是JVM的重要特性,它自动管理内存,避免了...
类加载器(ClassLoader)负责查找和加载类,双亲委托模型确保了类加载的安全性。理解这个机制对于理解和解决类冲突问题至关重要。 3. **运行时数据区**:JVM内存模型中,除了堆和栈,还包括方法区、本地方法栈和...
JVM使用类加载器来加载Java类到内存中,并对它们进行验证和解析,最后初始化这些类。类加载器子系统主要包括启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器...
书中的内容不仅包括理论知识,还有丰富的实践案例,帮助读者将理论与实际相结合,提升对JVM的理解。特别是对于内存模型的讲解,如堆内存、栈内存、方法区以及本地方法栈的运作机制,这些内容对于理解Java程序的运行...
5. **类加载器**:系统类加载器、扩展类加载器和应用程序类加载器之间的双亲委派模型,以及自定义类加载器的实现。 6. **JVM调优**:通过调整JVM参数,如-Xms、-Xmx设置堆大小,-XX:NewRatio设定新生代与老年代比例...
这个代码仓库可能包含了不同类加载器的示例,演示如何自定义类加载器以及如何影响类的生命周期。 2. **字节码执行机制**: JVM通过解释器和即时编译器(如HotSpot的C1和C2编译器)来执行字节码。解释器逐行执行,...
类的加载由类加载器完成,Java标准类库提供了三种基础类加载器:bootstrap loader(引导类加载器)、extension loader(扩展类加载器)和appclassloader(应用类加载器)。此外,用户还可以自定义类加载器。类加载器...
JVM(Java Virtual Machine,Java虚拟机)...冯立全通过分享,将JVM原理的理论与实践相结合,为听众提供了一个全面了解JVM的机会。这对于需要深入探讨Java生态系统和提高Java开发技能的开发者来说,是非常宝贵的资源。
书中可能讲解了双亲委派模型、自定义类加载器以及类加载器之间的关系。 8. **性能优化实践**:除了理论知识,书中可能还提供了大量实战案例,如通过代码优化减少对象创建、利用String池提高效率、避免过多反射操作...
学员将学习到如何自定义类加载器,以实现特定的加载策略。同时,理解类的静态初始化块和实例初始化块在JVM中的执行顺序也非常重要。 在JVM性能优化部分,课程会介绍如何通过JVM参数调整内存分配,避免内存溢出和...
1. 类加载机制:JVM按照类加载器、双亲委派模型、验证、准备、解析、初始化等步骤加载类。了解这一过程有助于理解类的生命周期和防止类冲突。 2. 字节码执行引擎:JVM通过解释器和即时编译器(JIT)来执行字节码,...
JVM通过类加载器(Class Loader)将类加载到内存中。类加载过程包括加载、验证、准备、解析和初始化五个阶段。类加载器分为启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类...
至于“inside JVM光盘”内容,通常会包含书中提到的源代码示例、补充材料和作者的其他资源,这将为读者提供一个实践和探索JVM的平台,加深对理论知识的理解。 总的来说,《深入Java虚拟机》是一本深度与广度兼备的...
1. 类加载机制:JVM采用双亲委派模型进行类加载,当一个类被请求加载时,首先会询问其父类加载器,只有当父类加载器无法完成加载时,才会尝试自己加载。这种机制避免了类的重复加载,同时也保证了核心类库的加载安全...
7. **类加载机制**:解析类加载过程,包括双亲委托模型、类加载器的层次结构以及如何自定义类加载器。 8. **JVM异常诊断**:介绍如何处理和排查JVM抛出的异常,如OutOfMemoryError、StackOverflowError等,以及如何...