`

JVM理论与实践【类加载器基础】

    博客分类:
  • Java
阅读更多

【 类加载器简介】

       类加载器(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

 

===============================

类加载器是一个相对比较复杂的话题,仅作入门了解!保密

 

1
1
分享到:
评论

相关推荐

    理论与实践结合 解密JVM-day02.rar

    在深入探讨JVM(Java虚拟机)的理论与实践结合时,...通过"理论与实践结合 解密JVM-day02"的学习,我们将不仅了解JVM的基本概念,还能掌握其在实际应用中的调优技巧,为开发高性能、低内存消耗的Java应用打下坚实基础。

    黑马程序员------类加载器学习注意点

    再者,类加载器与JVM的交互是通过反射实现的。通过`java.lang.ClassLoader`的`loadClass()`方法,我们可以动态加载类并执行相关操作。反射使得程序在运行时能够动态获取类的信息并进行操作,大大增强了代码的灵活性...

    理论与实践结合 解密JVM-day01.rar

    1. 类加载器:负责加载类文件到JVM内存中。 2. 运行时数据区:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 3. 执行引擎:解释器或即时编译器,负责执行字节码。 4. 本地方法接口:用于调用原生方法。 5. ...

    深入理解Java虚拟机JVM高级特性与最佳实践1

    在本书中,作者不仅涵盖了JVM的基本概念,还深入探讨了JVM的高级特性,包括内存管理(如垃圾收集器)、类加载机制、线程管理、编译优化(如Just-In-Time编译,JIT)以及性能调优等方面。通过对JVM内部工作机制的解析...

    JVM高级特性与最佳实践(第2版)+pdf+源码

    2. **类加载机制**:JVM通过类加载器将.class文件加载到内存中,形成运行时数据区的类元数据。了解类加载过程(加载、验证、准备、解析、初始化)和双亲委派模型,有助于定制类加载逻辑和实现热部署。 3. **内存...

    理论与实践结合 解密JVM-day03.rar

    类加载器是这一过程的关键,它负责找到并加载类文件到JVM中。双亲委托模型是类加载的默认策略,保证了类加载的有序性和安全性。 再者,垃圾回收(Garbage Collection, GC)是JVM的重要特性,它自动管理内存,避免了...

    理论与实践结合 解密JVM-day04.rar

    类加载器(ClassLoader)负责查找和加载类,双亲委托模型确保了类加载的安全性。理解这个机制对于理解和解决类冲突问题至关重要。 3. **运行时数据区**:JVM内存模型中,除了堆和栈,还包括方法区、本地方法栈和...

    JVM高级特性与最佳实践

    JVM使用类加载器来加载Java类到内存中,并对它们进行验证和解析,最后初始化这些类。类加载器子系统主要包括启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器...

    JVM规范与深入理解

    书中的内容不仅包括理论知识,还有丰富的实践案例,帮助读者将理论与实际相结合,提升对JVM的理解。特别是对于内存模型的讲解,如堆内存、栈内存、方法区以及本地方法栈的运作机制,这些内容对于理解Java程序的运行...

    jvm视频及笔记

    5. **类加载器**:系统类加载器、扩展类加载器和应用程序类加载器之间的双亲委派模型,以及自定义类加载器的实现。 6. **JVM调优**:通过调整JVM参数,如-Xms、-Xmx设置堆大小,-XX:NewRatio设定新生代与老年代比例...

    jvm相关代码仓库,包括类加载机制,字节码执行机制,JVM内存模型,GC垃圾回收,JV-jvm_practice.zip

    这个代码仓库可能包含了不同类加载器的示例,演示如何自定义类加载器以及如何影响类的生命周期。 2. **字节码执行机制**: JVM通过解释器和即时编译器(如HotSpot的C1和C2编译器)来执行字节码。解释器逐行执行,...

    inside_jvm.rar_Inside the JVM_gettingloaded.html_inside jvm_insi

    类的加载由类加载器完成,Java标准类库提供了三种基础类加载器:bootstrap loader(引导类加载器)、extension loader(扩展类加载器)和appclassloader(应用类加载器)。此外,用户还可以自定义类加载器。类加载器...

    JVM原理.pdf

    JVM(Java Virtual Machine,Java虚拟机)...冯立全通过分享,将JVM原理的理论与实践相结合,为听众提供了一个全面了解JVM的机会。这对于需要深入探讨Java生态系统和提高Java开发技能的开发者来说,是非常宝贵的资源。

    实战Java虚拟机——JVM故障诊断与性能优化.pdf

    书中可能讲解了双亲委派模型、自定义类加载器以及类加载器之间的关系。 8. **性能优化实践**:除了理论知识,书中可能还提供了大量实战案例,如通过代码优化减少对象创建、利用String池提高效率、避免过多反射操作...

    jvm视频教程2020最新.rar

    学员将学习到如何自定义类加载器,以实现特定的加载策略。同时,理解类的静态初始化块和实例初始化块在JVM中的执行顺序也非常重要。 在JVM性能优化部分,课程会介绍如何通过JVM参数调整内存分配,避免内存溢出和...

    JVM学习资料+笔记

    1. 类加载机制:JVM按照类加载器、双亲委派模型、验证、准备、解析、初始化等步骤加载类。了解这一过程有助于理解类的生命周期和防止类冲突。 2. 字节码执行引擎:JVM通过解释器和即时编译器(JIT)来执行字节码,...

    深入理解_Java_虚拟机_(JVM_高级特性与最佳实践)

    JVM通过类加载器(Class Loader)将类加载到内存中。类加载过程包括加载、验证、准备、解析和初始化五个阶段。类加载器分为启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类...

    深入Java虚拟机 JVM pdf

    至于“inside JVM光盘”内容,通常会包含书中提到的源代码示例、补充材料和作者的其他资源,这将为读者提供一个实践和探索JVM的平台,加深对理论知识的理解。 总的来说,《深入Java虚拟机》是一本深度与广度兼备的...

    inside JVM(深入JAVA虚拟机光盘内容)

    1. 类加载机制:JVM采用双亲委派模型进行类加载,当一个类被请求加载时,首先会询问其父类加载器,只有当父类加载器无法完成加载时,才会尝试自己加载。这种机制避免了类的重复加载,同时也保证了核心类库的加载安全...

    JVM Diagnostics Guide 1.4.2

    7. **类加载机制**:解析类加载过程,包括双亲委托模型、类加载器的层次结构以及如何自定义类加载器。 8. **JVM异常诊断**:介绍如何处理和排查JVM抛出的异常,如OutOfMemoryError、StackOverflowError等,以及如何...

Global site tag (gtag.js) - Google Analytics