1.Thread.currentThread().getContextClassLoader();// 当前线程的类加载器 2.Test.class.getClassLoader();// 当前类的类加载器 3.ClassLoader.getSystemClassLoader();// 系统初始的类 ...
分类:
其他好文 时间:
2016-05-13 12:21:21
阅读次数:
153
一、 解决方案
1) 自定义类加载器。
首先需要明白一点,class相等的判断条件不仅仅是类名相同,还需要加载它的ClassLoader相同。JVM内部规定一个ClassLoader不可以重复定义类,也就是说想要重定义一个类,就必须使用一个全新的ClassLoader。
JVM内部class被卸载的条件及其苛刻,甚至没有明确的方法可以直接调用,只有当加载该类型的类加载器实例为unreac...
分类:
编程语言 时间:
2016-05-13 02:27:20
阅读次数:
592
类的加载过程Java类从加载到卸载大致如下
其中的部分工作内容:一、加载使用类的全名获取二进制流,在内存中生成class对象。
二、验证保证class文件中内容不会危害虚拟机自身的安全等。三、准备为类变量分配初始值。final等修饰的固定变量分配具体值,其他分配零值。
四、解析虚拟机将常量池中的符号引用替换为直接引用的过程
类加载器(1)Bootstrap ClassLoader
这个...
分类:
编程语言 时间:
2016-05-13 01:28:55
阅读次数:
162
类加载器按照层次,从顶层到底层,分为以下三种:
(1)启动类加载器(Bootstrap ClassLoader)
这个类加载器负责将存放在JAVA_HOME/lib下的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中。启动类加载器无法被Java程序直接引用。
(2)扩展类加载器(Extension ClassLoader)
这...
分类:
其他好文 时间:
2016-05-13 00:14:02
阅读次数:
155
Java为ClassLoader提供了一个URLClassLoader实现类,该类也是系统类加载器和扩展类加载器的父类(此处的父类,就是指类与类之间的继承关系)。URLClassLoader功能比较强大,它既 可以从本地文件系统获取二级制来加载类,也可以从远程主机获取二进制文件来加载类。
java.net
类 URLClassLoader
java.lang.Object
ja...
分类:
Web程序 时间:
2016-05-12 20:51:03
阅读次数:
229
文件类加载器,该加载器重载了loadClass方法,逻辑是只读取文件来加载类,不委托给父类加载器进行加载 测试代码 从下面的输出,可以看出: 1、在加载TestClass类时就已经引起其他类的加载了。 2、不要轻易重载loadClass(),双亲制很重要,否则会引起一个类存在多个Class对象。 3 ...
分类:
其他好文 时间:
2016-05-12 01:23:54
阅读次数:
285
jvm里有多个类加载,每个类加载可以负责加载特定位置的类, 例如: bootstrap类加载负责加载jre/lib/rt.jar中的类, 我们平时用的jdk中的类都位于rt.jar中。 extclassloader负责加载jar/lib/ext/*.jar中的类。 appclassloader负责c ...
分类:
其他好文 时间:
2016-05-07 15:04:18
阅读次数:
121
做自己的类加载器 虚拟机的核心是通过类加载器来加载.class文件,然后进行相应的解析执行。那么我们可以自己做类加载器,手动加载需要的.class以进行解析执行,从而扩展虚拟机的功能。 以下内容摘自API文档:应用程序需要实现 ClassLoader 的子类,以扩展 Java 虚拟机动态加载类的方式。网络类加载器子类必须定义方法 findClass 和 loadClassData,以实现从网络加载类...
分类:
编程语言 时间:
2016-05-07 09:36:42
阅读次数:
277
类加载器
加载类的开放性
类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己决定如何获取所需的类。
虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说...
分类:
其他好文 时间:
2016-05-07 08:58:27
阅读次数:
226
Java中获取资源文件的时候,经常会用到Class.getResource和ClassLoader.getResource,本文给大家说一下这两者方法在获取资源文件时的路径差异。
Class.getResource(String path)
path不以’/’开头时,默认是从此类所在的包下取资源;
path以’/’开头时,则是从项目的ClassPath根下获取资源。在这里’/’表示ClassP...
分类:
编程语言 时间:
2016-05-06 12:25:32
阅读次数:
197