一.ClassLoader分为bootClassStrap,ExtClassLoader,AppClassLoader.
booeClassStrap由C或更底层的语言实现,用来加载jvm和操作系统最底层的核心类库
Ext由java实现,用来加载比较核心的类库
App由java实现,用来加载应用资源,比如class path中的资源,eclipse plugin中的资源等等
二.加载器通常都是把加载权优先上抛给parent加载器,当parent加载不到时才转交给child,最后一个child也加载不到时,抛出ClassNotFoundException.
三.如下代码:
ClassLoader cl = MyClassLoader.class.getClassLoader();
System.out.println(cl);
System.out.println(cl.getParent());
System.out.println(cl.getParent().getParent());
System.out.println("bootStrap:“"+System.getProperty("sun.boot.class.path"));
System.out.println("extClassLoader:“"+System.getProperty("java.ext.dirs"));
System.out.println("appClassLoader:“"+System.getProperty("java.class.path"));
ClassLoader cl2 = MyDfs.class.getClassLoader();
System.out.println("----------------------------------------------");
System.out.println(cl2);
System.out.println(cl2.getParent());
System.out.println(cl2.getParent().getParent());
System.out.println("bootStrap:“"+System.getProperty("sun.boot.class.path"));
System.out.println("extClassLoader:“"+System.getProperty("java.ext.dirs"));
System.out.println("appClassLoader:“"+System.getProperty("java.class.path"));
运行结果:
sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$ExtClassLoader@addbf1
null
bootStrap:“F:\istallHome\java\jdk\jre\lib\resources.jar;F:\istallHome\java\jdk\jre\lib\rt.jar
extClassLoader:“F:\istallHome\java\jdk\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
appClassLoader:“D:\workspace\project\work\hadoop-0.19.2\hadoop-0.19.2\src\contrib\eclipse-plug...
----------------------------------------------
sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$ExtClassLoader@addbf1
null
bootStrap:“F:\istallHome\java\jdk\jre\lib\resources.jar;F:\istallHome\java\jdk\jre\lib\rt.jar
extClassLoader:“F:\istallHome\java\jdk\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
appClassLoader:“D:\workspace\project\work\hadoop-0.19.2\hadoop-0.19.2\src\....
可以看出来。他们分别加载了哪些东西,而且不同两个类的classLoader其实是同一个对象。至于BootStrap为什么为null.那是因为他不是java object,因为是用其他底层语言实现的,所以我们无法看到他的对象信息,但其实它是存在的。
分享到:
相关推荐
Sun 官方关于 ClassLoader原理的文章,值得一看
详细说明了websphere classloader 的架构与实现
使用Android的classloader加载器实现热更新,通过反射机制获取到源码的Elements数组替换classes.dex实现更新,只能重启软件进行更新,无法实现实时更新。
前面已经写过一篇关于java classloader的拙文java classloader原理初探。 时隔几年,再看一遍,觉得有些地方显得太过苍白,于是再来一篇: 完成一个Java类之后,经过javac编译,会生成一个class文件,这个...
ClassLoader类加载机制和原理详解
一、什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的...
【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!
关于J2EE服务器的ClassLoader的原理,该文档清晰了揭示了jvm装载类的顺序,同时用户可以自定义修改classLoader的配置 通过该文档,可以加深对Java虚拟机的理解
该电子书详细介绍了java虚拟机类加载机制,对于深入理解jvm工作原理有很好的帮助作用,对于初学java,有一定工作经验的小伙伴来说是一本提高自身java素养,夯实自己java基本技能的“葵花宝典”。
JBoss has always had a unique way of dealing with classloading, and the new classloading layer that comes with Microcontainer is no exception (keep in mind that you can use Microcontainer without ...
java自定义类加载classloader文档,包括代码,以及详细的原理及过程
Java_ClassLoader详解,解说java类的加载的原理,让你轻松了解java的类加载
ClassLoader加密技术改进研究,徐首泽,金瓯,ClassLoader加密技术是Java当中用的比较广泛的代码保护技术,本文分析了ClassLoader加密技术的原理,发现并分析了现有方法存在的漏洞,同�
本篇文章主要给大家讲述了Java中ClassLoader类加载的原理以及用法总结,一起学习下。
Java类加载原理解析 classloader
详细介绍ClassLoader的原理和应用。分析2个案例,说明ClassLoader的使用。 第七课 性能监控工具 线程死锁分析 OOM分析 介绍常用的JVM诊断和分析工具,并以死锁和OOM为例,展示这些工具的使用。 第八课 分析Java...
Java 编程语言的基本原理 Java 编程语言是当今最流行的编程语言之一,它的基本原理是确保 Java 程序可以跨平台运行的。为了实现这一点,Java 虚拟机(JVM)扮演着至关重要的角色。 一、Java 程序跨平台原理 Java ...
JVM 原理讲解和调优 JVM(Java Virtual Machine,Java 虚拟机)是 Java 语言的核心组件,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 的主要功能是将 Java 字节码转换为...