类加载器按照层次,从顶层到底层,分为以下三种:
(1)启动类加载器(Bootstrap ClassLoader)
这个类加载器负责将存放在JAVA_HOME/lib下的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中。启动类加载器无法被Java程序直接引用。
(2)扩展类加载器(Extension ClassLoader)
这...
分类:
其他好文 时间:
2016-05-13 00:14:02
阅读次数:
155
类加载器
加载类的开放性
类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类。
虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说...
分类:
其他好文 时间:
2016-05-07 08:58:27
阅读次数:
226
java中采用双亲委派模型(Parents Delegation Model)来实现类的加载模式。双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,此处的父子关系不以继承来实现,而是采用组合来利用父加载器。双亲委派模型的工作过程:如果一个类加载器收到了类加载的请求,....
分类:
编程语言 时间:
2015-10-21 12:30:59
阅读次数:
159
在了解双亲委派模型之前,先了解一下类加载器的概念:类加载器的作用就是将真实的class文件根据位置将该Java类的字节码装入内存,并生成对应的Class对象。用户可以通过继承ClassLoader和重写findClass方法来定义自己的类加载器进行加载,系统类加载器按照层次,分为:(1).启动类加载...
分类:
其他好文 时间:
2015-10-17 12:05:56
阅读次数:
185
作为一个程序员,仅仅知道怎么用是远远不够的。起码,你需要知道为什么可以这么用,即我们所谓底层的东西。
那到底什么是底层呢?我觉得这不能一概而论。以我现在的知识水平而言:对于Web开发者,TCP/IP、HTTP等等协议可能就是底层;对于C、C++程序员,内存、指针等等可能就是底层的东西。那对于Java开发者,你的Java代码运行所在的JVM可能就是你所需要去了解、理解的东西。
我会在接下...
分类:
其他好文 时间:
2015-06-26 13:33:13
阅读次数:
160
Java的ClassLoader就是用来动态装载class的,ClassLoader对一个class只会装载一次,JVM使用的ClassLoader一共有4种: 启动类装载器,标准扩展类装载器,类路径装载器和网络类装载器。 这4种ClassLoader的优先级依次从高到低,使用所谓的“双亲委派模型....
分类:
编程语言 时间:
2015-06-09 15:42:16
阅读次数:
155
站在虚拟机的角度上,只存在两种不同的类加载器: 一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分; 另外一种就是其它所有的类加载器,这些类加载器都由Java语言实现,独立于虚拟机外部,并且全部继承自java.lang.ClassL...
分类:
编程语言 时间:
2015-04-04 22:33:20
阅读次数:
1714
tomcat 7自带很多junit测试用例,可以帮助我们窥探源码的秘密。以下使用来测试类加载器的一个测试用例。类加载器也是对象,他们用来将类从类从。class文件加载到虚拟机,这些已经讲了很多,深入jvm中说的很详细,什么双亲委派模型,在书中还以tomcat为例讲解。/* * Licensed to...
分类:
其他好文 时间:
2015-01-26 20:43:28
阅读次数:
183
以下是Classloader的中最重要的方法,也就是所谓的双亲委派模型。这个模型第一次在周志明的书上看到,当时看了只知道是类加载过程是首先是委托给父加载器,否则父不能加载,则自己加载,整个过程实则是一个很简单的递归过程,本文以实例讲解这个模型到底是咋实现的?protected Class loadC...
分类:
编程语言 时间:
2015-01-22 20:12:09
阅读次数:
189
Java的设计初衷是主要面向嵌入式领域,对于自定义的一些类,考虑使用依需求加载原则,即在程序使用到时才加载类,节省内存消耗,这时即可通过类加载器来动态加载。
如果你平时只是做web开发,那应该很少会跟类加载器打交道,但如果你想深入学习tomcat服务器的架构,它是必不可少的。所谓类加载器,就是用于加载Java类到Java虚拟机中,它负责读取Java字节码,并转换成java.lang.Class类...
分类:
编程语言 时间:
2014-08-10 21:43:30
阅读次数:
358