转自:http://www.ibm.com/developerworks/cn/java/j-lo-hotswapcls/#ibm-pcon Java ClassLoader 技术剖析 在本文中,我们将不对 Java ClassLoader 的细节进行过于详细的讲解,而是关注于和构建在线升级系统相关 ...
分类:
编程语言 时间:
2016-05-23 19:00:25
阅读次数:
250
我不喜欢那些泛泛而谈的去讲那些形而上学的道理,更不喜欢记那些既定的东西。靠记忆去弥补思考的人,容易陷入人云亦云的境地,最后必定被记忆所围困,而最终消亡的是创造力。希望这个高手之路系列能够记录我学习安卓的点点滴滴。从而汇成流,聚为江,成为海。 下面就结合代码分析一下ClassLoader这个东西。 安 ...
分类:
移动开发 时间:
2016-05-17 21:17:00
阅读次数:
268
1、恶汉:因为加载类的时候就创建实例,所以线程安全(多个ClassLoader存在时例外)。缺点是不能延时加载。2、懒汉:需要加锁才能实现多线程同步,但是效率会降低。优点是延时加载。3、双重校验锁:麻烦,在当前Java内存模型中不一定都管用,某些平台和编译器甚至是错误的,因为sb = new Sin ...
分类:
编程语言 时间:
2016-05-13 17:03:43
阅读次数:
145
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