一.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,因为是用其他底层语言实现的,所以我们无法看到他的对象信息,但其实它是存在的。
分享到:
相关推荐
### Java ClassLoader原理详解 #### 摘要 本文探讨了Java虚拟机(JVM)中的一个重要特性:动态类加载(Dynamic Class Loading)。这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载...
### WebSphere ClassLoader原理 #### 一、概述 在探讨WebSphere Application Server v6中的ClassLoaders之前,我们首先简要回顾一下ClassLoaders的基本概念及其在Java虚拟机(JVM)中的作用。 **ClassLoaders**是...
热更新通常依赖于类加载器(Classloader)的工作原理来实现,本篇文章将深入探讨如何利用Android的类加载器实现热更新的机制。 首先,我们需要理解什么是类加载器。在Java和Android中,类加载器是负责查找、加载和...
前面已经写过一篇关于java classloader的拙文java classloader原理初探。 时隔几年,再看一遍,觉得有些地方显得太过苍白,于是再来一篇: 完成一个Java类之后,经过javac编译,会生成一个class文件,这个...
本文将深入探讨ClassLoader的工作原理和类加载机制,帮助开发者理解这个至关重要的概念。 1. 类加载机制概述 Java的类加载机制遵循“双亲委派模型”(Delegation Model)。当一个类被加载时,它首先会尝试由当前...
学习ClassLoader的工作原理以及如何创建自己的ClassLoader是必要的。 首先,让我们深入了解ClassLoader的基本概念。在传统编程语言中,如C或C++,程序通常是一个单一的可执行文件,而Java则不同,它的编译结果是以...
一、Classloader的工作原理 Java的类加载机制遵循双亲委派模型,即当一个类加载器需要加载类时,它首先委托父类加载器尝试加载,只有当父类加载器无法加载时,才会尝试自己加载。这种设计避免了类的重复加载,并...
理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将深入探讨Java ClassLoader的内部工作,并通过一个具体的实例来展示如何定制自己的ClassLoader。 ...
深入理解ClassLoader的工作原理对于优化应用性能、解决类加载问题以及实现自定义加载策略至关重要。 首先,JVM启动时,会构建一个类加载器的层次结构,主要包括三个基本类加载器: 1. Bootstrap ClassLoader:引导...
【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!
通过对`ClassLoader`的基本概念、工作原理、双亲委托机制以及不同类型的类加载器的了解,我们可以更好地理解Java类加载的过程及其背后的设计哲学。这对于深入理解Java虚拟机的内部机制以及开发高质量的应用程序都至...
本示例"ClassLoader小例子"将深入探讨这个概念,并通过一个具体的程序来演示其工作原理。下面我们将详细讨论ClassLoader的基本概念、工作流程以及如何自定义ClassLoader。 1. **ClassLoader的基本概念** - 类加载...
理解ClassLoader的工作原理对于优化Java应用程序性能以及解决类冲突等问题具有重要意义。 一、ClassLoader的基本概念 Java程序由多个类组成,每个类对应一个.class文件。当程序运行时,ClassLoader根据需要动态...
本文将深入浅出地探讨JVM ClassLoader的工作原理和相关知识点。 首先,ClassLoader可以分为三种基本类型:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。Bootstrap ClassLoader是JVM...
理解ClassLoader的工作原理对于优化应用性能、处理类加载问题以及实现自定义加载器至关重要。 首先,我们来了解一下ClassLoader的基本层次结构。在Java中,ClassLoader分为三个主要层次:Bootstrap ClassLoader、...
JBoss 5是一款知名的Java应用服务器,其在类加载(Class Loading)方面有着独特的处理方式...通过理解和掌握JBoss 5的类加载原理,开发者可以更有效地管理和优化应用程序的运行时环境,提高软件的可扩展性和可维护性。