ClassLoader
专题(一):
ClassLoader
基础
<!---->
<o:p>
</o:p>
ClassLoader
专题(二):从
Servlet
容器看
ClassLoader
机制的妙用
JVM启动,会形成3个类加载器组成的初始化加载器层次结构:
bootstap classloader (加载核心类)
||
extension classloader(加载ext(目录),即java.ext.dirs())
||
system classloader (加载-classpath或者java.class.path或者CLASSPATH)
ClassLoader机制:
a)全盘负责:一个classloader加载一个class后,这个class所引用或者依赖的类也由这个classloader载入,除非显示的用另一个classloader载入
b)委托机制:先由父加载器加载,除非父加载器找不到时才从自己的类路径中去寻找
c)Cache机制:classloader采用缓存机制,即先查cache;若cache中保存了这个class就直接返回;若无,才从文件读取和转化为class并放入cache
ClassLoader加载类顺序:
1)检查cache是否有该类:
11)若有直接返回
12)若无,请求父类加载
121) 若无父,则从bootstap classloader加载
2)加载:
21)寻找class文件(丛与此classloader相关的类路径中寻找)
22)从文件载入class
23)找不到则抛出ClassNotFoundeException
3)扩展:
记载时即2),覆写findClass可以实现自己的载入策略
记载时即2),覆写loadClass来实现自己的载入过程
如何实现运行时动态载入与更新
本质:只要动态改类搜索路径和清除classloader的cache已载入的class就ok
做法:
1)继承ClassLoader:覆写loadClass方法,动态寻找class文件
2)只要重新使用一个新的类搜索路径来new一个classloader就可以,这样既更新了类的搜索路径以便来载入新的class,也更新生成了一个空白的cache
classloader载入的方式
1)Pre-loading 预先载入,载入基础类
2)load-on-demand 按需求载入
JDK为啥有两个JRE?
JDK中jre是运行java本身的程序,如javac
ProgramFile(默认安装)中jre是运行用户编写的java程序
分享到:
相关推荐
LazyWorker.zip,一个智能控制进入电子邮件地址,自动检查是否存在域,如果域可以接收电子邮件。LaZyWork是一个帮助类延迟任务。例如,检查需要网络操作且不应在每次按键关闭后进行的输入。
Java 虚拟机中ClassLoader 相关简介 双亲委托机制 Android 中ClassLoader 简介
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang....
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:688) at java.lang.ClassLoader.loadClass(ClassLoader.java:667) at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:119) at...
ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的
类加载器示例 在运行时重新加载 Java 类。 博文代码: :
Maven的类加载器插件只是针对Maven插件中的类加载问题的实验
自定义classloader的使用
gs-classloader-inspector 使用 JMX 浏览千兆空间类加载器 启用将 -javaagent:ClassloaderAgent.jar 添加到 JVM 参数识别 Gigaspaces 类加载器并显示附加信息
破解java加密的ClassLoader.java,在classloader植入破解代码
ClassLoader原理,ClassLoader原理 ClassLoader原理
这是一个项目。 JavaEE 兼容版本 servlet 与 Servlet 3.0 规范兼容,只能在 JavaEE 6.0+ 应用程序中使用。 安装 将 Jar 文件放在 Web 应用程序的/WEB-INF/lib目录中。 用法 将 Jar 放入应用程序的 /WEB-INF/lib ...
Java ClassLoader定制实例
java classloader classpath 张孝祥
理解Java ClassLoader机制
用于验证理解Android中Classloader加载类机制的程序demo,从中可以对比DexClassLoader和PathClassLoader的区别联系。
classloader-playground, 一个简单的java依赖隔离容器类
Classloader
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang....
ClassLoader类加载机制和原理详解