`
hzh0725
  • 浏览: 82307 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Classloader 相关知识

    博客分类:
  • java
阅读更多

一般情况,jdk会产生3classloader,Bootstrap Classloader,Extension ClassloaderAppClassloader,其中Bootstrap是用c++编写得,我们是看不到它得,打印出来是null,是用来加载核心类得

Bootstrap相关的系统参数为sun.boot.class.path和命令行参数-Xbootclasspath来改变他们

Bootstrap Classloader加载下面这些东西:

/lib/rt.jar

/lib/i18n.jar

/lib/sunrsasign.jar

/lib/jsse.jar

/lib/jce.jar

/lib/charsets.jar

/classes

sun.misc.Launcher.getBootstrapClassPath().getURLs(), 通过这个语句可以得到相关的boot jar

Extension Classloader默认加载为“\lib\ext”,但可以通过-Djava.ext.dirs来修改
注:ExtClassLoader是加载目录。加载/lib/ext中的jar文件或者子目录classes中的class文件

AppClassLoader 是加载应用classpath的东西

他们三者的关系是 AppClassLoader.getParent() == Extension Classloader,Extension Classloader.getParent() == Bootstrap Classloader

jdk 本身的classloader加载类顺序是,先让Parent classloaderload类,如果找不到,然后再自己找。

ClassLoader代码片断

protected synchronized Class<?> loadClass(String name, boolean resolve)

          throws ClassNotFoundException

    {

          // First, check if the class has already been loaded

          Class c = findLoadedClass(name);

          if (c == null) {

              try {

                    if (parent != null) {

                        c = parent.loadClass(name, false);

                    } else {

                        c = findBootstrapClass0(name);

                    }

              } catch (ClassNotFoundException e) {

                  // If still not found, then invoke findClass in order

                  // to find the class.

                  c = findClass(name);

              }

          }

          if (resolve) {

              resolveClass(c);

          }

          return c;

    }

 classloader

resolveClass():主要是检查文件是不是存在,比如已经形成了这个class对象,但又删除了这个class文件.

loadclass():定义load class顺序,但我们可以overrideAntClassLoader就这样做

findclass():classloader子类可以orverride这个类

 

some useful API

 

/*得到系统的classloader,也就是 appclassloader*/ 
ClassLoader.getSystemClassLoader(); 
/*得到ext的classloader */ 
ClassLoader appCL = ClassLoader.getSystemClassLoader(); 
if (appCL != null) parent = appCL.getParent(); 
/*得到当前的classloader */ 
this.getClass().getClassLoader(); 

  

classloader 关系 

所有classloader都可以使用 Bootstrap Classloader里的class,(rt.jar等),

举个例子,任何一个class都是object子类,所以object 类必须被load.

 

不同的classloader去load同一个class,会产生 java.lang.ClassCastException  错误

分享到:
评论

相关推荐

    ClassLoader运行机制 自己写的

    理解并能灵活运用这些知识对于开发和调试Java应用程序,特别是部署在容器如WebLogic上的应用,是至关重要的。在编写自己的ClassLoader时,需要考虑如何正确实现加载逻辑,以及如何处理类加载的并发问题,确保应用的...

    JVM ClassLoader简析

    本文将深入浅出地探讨JVM ClassLoader的工作原理和相关知识点。 首先,ClassLoader可以分为三种基本类型:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。Bootstrap ClassLoader是JVM...

    java classloader

    `CH_05.package与import机制.pdf`可能讲解了与ClassLoader相关的包和导入机制,因为它们与类的组织和加载密切相关。 `CH_03.Java与MS Office.pdf`、`CH_04.用Visual Studio.net来操控Java虚拟机.pdf`、`CH_06.Ant....

    使用classloader动态加载Class

    本文将深入探讨“使用classloader动态加载Class”的相关知识点,同时参考了博客链接:https://ldbjakyo.iteye.com/blog/1046984。 首先,理解ClassLoader的工作原理至关重要。Java中的类加载过程分为三个主要阶段:...

    java中classLoader的使用

    Java中的类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,它负责将类的.class文件从文件系统或者网络中加载到内存中,并转换为对应的Class对象。类加载器的工作流程主要包括加载、验证、准备、解析...

    classloader 加密解密应用程序 ,反编译class

    在Java编程语言中,`ClassLoader`是一个至关重要的组件,它负责加载类到JVM(Java虚拟机)中。本文将深入探讨`ClassLoader`的工作原理、...在实际开发中,理解并运用这些知识点将有助于构建更健壮、更安全的软件系统。

    探究java的ClassLoader及类变量初始化顺序

    在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。...通过学习这些知识点,开发者可以更好地优化代码、设计更健壮的系统,并解决与类加载和初始化相关的复杂问题。

    Java ClassLoader学习总结

    知识点总结: * Java 类加载机制是 Java 中一个非常重要的机制,它负责加载 Class 文件到 JVM,以供程序使用。 * ClassLoader 是 Java 中的一个抽象类,它的主要作用是加载 Class 文件到 JVM 中。 * ClassLoader ...

    j-classloader-ltr

    ### Java ClassLoader 知识点解析 #### 一、引言 在《classloader教程 --- from IBM》这篇教程中,作者Greg Travis通过一系列详细的讲解帮助读者理解Java中的类加载器(ClassLoader)。作为Java运行时系统的一个核心...

    Understanding the Java ClassLoader

    ### Java ClassLoader理解详解 #### 一、引言 在商业流行的编程语言中,Java以其独特的运行机制脱颖而出:它在Java虚拟机(JVM)上运行。...希望这篇教程能为你提供足够的背景知识,以便在实践中应用这些技术。

    ClassLoader总结

    以下是ClassLoader的相关知识点: 1. 类加载机制: Java的类加载过程分为加载、验证、准备、解析和初始化五个阶段。ClassLoader主要涉及加载阶段,它根据类名查找并加载对应的.class文件。 2. 类加载器层次结构:...

    一个简单的ClassLoader

    本文将深入探讨一个简单的`ClassLoader`实现,以及与之相关的知识点。 首先,我们来看标题:“一个简单的ClassLoader”。这里的“简单”通常意味着这个自定义`ClassLoader`只实现了基本的功能,如加载特定位置的...

    java自定义类加载classloader文档,包括代码

    ### Java自定义类加载器(Class Loader)详解 #### 一、引言 在Java语言中,类加载...总之,理解和掌握Java类加载器的相关知识对于提高程序设计能力具有重要意义。希望本文能帮助读者更好地理解和应用Java类加载器。

    web_classloader_test.zip_web classloader

    下面将详细探讨这些知识点。 1. **双亲委派模型**:这是Java类加载器的基础模型,它规定了类加载的顺序。当一个类加载器收到加载类的请求时,它会首先委托父类加载器去尝试加载,只有当父类加载器无法加载时,当前...

    JAVA ClassLoader 讲解 (类加载器)

    希望这些知识能够对你有所帮助。 --- 通过上述内容,我们可以看到Java类加载器的重要性及其在Java开发中的作用。掌握了类加载器的原理和技术,开发者可以更加灵活地管理Java应用程序中的类加载过程,这对于优化...

    Java SE: ClassLoader in depth

    对于标题“Java SE: ClassLoader in depth”和描述中提到的“源码”、“工具”,实际上在给出的内容部分并没有任何与Java ClassLoader深入相关的技术信息。所提供的内容实际上是一份公司入职报到的指南,与Java编程...

    了解Java ClassLoader

    Java ClassLoader是Java虚拟机(JVM)的重要组成部分,它负责加载类到JVM中运行。理解ClassLoader的工作原理对于深入学习Java以及进行JVM优化、插件开发等高级技术至关重要。...因此,它是Java程序员必备的知识点之一。

    Tomcat 5.0.18 ClassLoader source code insight

    通过阅读和分析`icpc2013.pdf`这个文件,虽然其内容与Tomcat的ClassLoader无关,但通常这类会议论文或报告可能会涉及软件工程、编程语言或系统架构等相关领域,这些知识也能辅助我们更好地理解和改进应用程序,包括...

    Java中ClassLoader类加载学习总结

    知识点二:ClassLoader类的loadClass方法 ClassLoader类的loadClass方法是实现双亲委派模型的核心方法,该方法的主要逻辑是:首先检查类是否已被加载,如果没有就判断是否已被父加载器加载,如果还没有再调用自己的...

    【独家】【笔面试知识要点】25.ClassLoader接口抽象类与顶级class1

    在Java编程语言中,ClassLoader是核心...总的来说,这些知识点涵盖了Java中的类加载机制、接口与抽象类的区别、主方法的特性、变量默认值以及类的访问控制,这些都是Java程序员在面试和实际开发中必须掌握的基础知识。

Global site tag (gtag.js) - Google Analytics