`
836811384
  • 浏览: 547710 次
文章分类
社区版块
存档分类
最新评论

类加载器的加载机制

 
阅读更多
加载阶段中的“通过一个类的全限定名来获取此类的二进制字节流”这个动作放到jvm外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模版被称为“类加载器”。
双亲委派模型
站在jvm角度讲,只有两种类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器是由C++实现的,是jvm的一部分。另一种就是其他所有的类加载器,这些由java语言实现,独立于jvm,并且全部继承自抽象类java.lang.ClassLoader。
划分的更细致些:
1、启动类加载器bootstrap classloader
负责将存放在JAVA_HOME/lib下的类库加载到虚拟机内存中,该类加载器无法被java程序直接引用。
2、拓展类加载器
3、应用程序类加载器:这个是由classloader中的getSystemClassLoader()方法的返回值,所以一般称为系统类加载器。如果系统内部没有自定义的加载器,则系统类加载器就是默认的类加载器
如果一个类加载器收到了类的加载请求,它首先不会自己去尝试加载这个类,而是把请求委派给父类加载器去完成,每一层的类加载器都是如此,因此所有的 加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己去加载。
//下面是一个简单的自定义classloader的实现,并且与默认加载器比较加载结果
packageclassloadertest;
importjava.io.InputStream;
publicclassClassLoaderTest{
publicstaticvoidmain(String[]args)throwsException{
ClassLoadermyLoader=newClassLoader(){
publicClass<?>loadClass(Stringname){
byte[]b=null;
try{
StringfileName=name.substring(name.lastIndexOf(".")+1)
+".class";
System.out.println(fileName);
InputStreamis=getClass().getResourceAsStream(fileName);
if(is==null){
returnsuper.loadClass(name);
}
b=newbyte[is.available()];
is.read(b);
}catch(Exceptione){
}
returndefineClass(name,b,0,b.length);
}
};
Objectobj=myLoader.loadClass("classloadertest.A").newInstance();
System.out.println(obj.getClass());
System.out.println(objinstanceofclassloadertest.A);
}
}
结果如下
A.class
Object.class
classclassloadertest.A
false
分享到:
评论

相关推荐

    ClassLoader类加载机制

    类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。

    Java类加载机制与反射-PPT

    Java的类加载机制:加载,连接,初始化。JAVA类加载器: Bootstrap ClassLoader : 根类加载器, Extension ClassLoader: 扩展类加载器, System ClassLoader : 系统类加载器, Java反射

    java类加载器实例

    类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。

    java类加载机制.xmind

    该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...

    什么是类加载器和什么是双亲委派机制.xmind

    什么是类加载器和什么是双亲委派机制

    JVM核心机制_深入类加载器_层次结构(三种类加载器)_代理加载模式_双亲委派机制_类加载器

    JVM核心机制_深入类加载器_层次结构(三种类加载器)_代理加载模式_双亲委派机制

    java的ClassLoader类加载器机制

    jvm运行的过程中,需要载入类,而类的加载需要类加载器,本文章提供了java的类加载器的工作原理。可以使读者更加理解jvm的运行机制。

    Java类加载器机制与模型.pdf

    Java类加载器机制与模型

    JVM类加载器说明文档

    介绍Java类的加载机制,对于深入理解Java的深层原理很有帮助

    JAVA ClassLoader 讲解 (类加载器)

    ClassLoader类加载器讲解,理解JAVA类加载机制

    JVM(三):类加载机制(类加载过程和类加载器)1

    1.编写个向接的应程序,可能等到运时再指定其实现的类 2.户可以定义个类加载器,让程序在运时从络或其他地加载 1.加载:(重点) 1.通过“类全名”来获取定义此

    java类加载器和反射学习要点ppt

    本学习讲义是关于java类加载和反射机制需要注意的要点学习,内容详细

    java类加载器和核心机制.pdf

    java类加载器和核心机制.pdf

    深入理解java类加载机制

    此外,我们还会探讨Java程序的类加载器和双亲委派机制,以及自定义类加载器和类卸载的实现原理和应用方法。 总的来说,本资源将为Java程序员提供全面的Java字节码和类加载原理和实践经验。通过学习本资源,开发人员将...

    Java类加载机制.doc

    对java的类加载机制,进行了深入的解析,并详细的实现了客户化加载器。

    类加载机制1

    简介类加载器是Java语言的一个创新,也是Java语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1

    Java类加载机制学习1

    (1)双亲模型类加载器的作用:从class文件定义出class对象通过defineClass()方法进行定义类加载器 初始类加载器关系:该类的定义类加载器是该类

    JAVA-JVM-01类加载机制

    java中JVM类加载器和双亲委派机制剖析,类加载示例、加载器示例、自定义一个类加载器示例;Tomcat自定义加载器详解

    【JVM】类加载器与双亲委派模型

    有关类加载的全过程,可以先参考我的另外一篇文章类的奇幻漂流——类加载机制探秘 类加载器的类型 类加载器有以下种类: 启动类加载器(Bootstrap ClassLoader) 扩展类加载器(Extension ClassLoader) 应用类...

    自定义Java类加载器demo

    自定义Java类加载器demo,自定义了一个classLoader,重写了loadClass 和findClass,注意 loadClass打破了双亲委派机制,所有的类都要在自定义的class文件中找到,而findClass遵循了双亲委派机制

Global site tag (gtag.js) - Google Analytics