旅游网站设计与建设论文,用什么做asp网站,接推广怎么收费,python做的网站多吗【0】README
0.1#xff09;本文文字转自#xff1a; 深入剖析tomcat#xff0c; 旨在 理解 jvm 的类载入器#xff1b;
【1】 jvm的类载入器相关
1#xff09;jvm 使用了3种类载入器来载入所需要的类#xff1a;分别是引导类载入器#xff08;bootstrap class load…【0】README
0.1本文文字转自 深入剖析tomcat 旨在 理解 jvm 的类载入器
【1】 jvm的类载入器相关
1jvm 使用了3种类载入器来载入所需要的类分别是引导类载入器bootstrap class loader 扩展类载入器extension class loader 和 系统类载入器system class loader。而 引导类载入器是 扩展类载入器的父亲 扩展类载入器是 系统类载入器的父亲。 23种载入器的详细描述
2.1引导类载入器 用于引导启动 jvm。当调用 javax.exe 是 就会启动引导类载入器。引导类载入器是使用本地代码来实现的 因为它用来载入运行 jvm 所需要的类 以及所有的 java 核心类。如 java.lang 包 和 java.io 包下的类。启动类载入器会在 rt.jar 和 i18n.jar 等java 包中搜索要载入的类。2.2 扩展类载入器 负责载入标准扩展目录中的类。sum 公司的 jvm 的标准扩展目录是 /jdk/jre/lib/ext/2.3系统类载入器是默认的类载入器 他会搜索在环境变量 CLASSPATH 中指明的路径和 JAR 文件
3jvm 使用的是哪种类载入器呢 3.1答案在于 类载入器的代理模型。 3.2载入一个类 的steps每当需要载入一个类 的时候
step1首先调用 系统类载入器但并不会立即载入这个类step2相反他会将载入类的任务交给其父类载入器——扩展类载入器step3 而扩展类载入器也会将载入任务交给其父类载入器——引导类载入器
3.3因此引导类载入器会首先执行载入某个类的任务。接下来有4中cases
case1如果引导类载入器找不到需要载入的类那么扩展类载入器会尝试 载入该类case2如果扩展类载入器也找不到该类就轮到系统类载入器继续执行载入任务case3如果系统类载入器也找不到这个类抛出 ClassNotFoundException 异常
3.4为什么要这么做 代理模型的重要用途就是为了 解决 类载入过程中的安全问题
看个荔枝 当程序的某个地方调用了 自定义的 java.lang.Object 类时 系统类载入器会将载入工作 委托给 扩展类载入器继而会被交给 引导类载入器。 引导类载入器搜索其 核心库 找到标准的 java.lang.Object 类 并将之实例化。 结果是 自定义的 java.lang.Object 类并没有被载入。幸运的是 jvm 我们使用了 代理模型 这种case 是不会发生 的。
4关于 java 中类载入机制的一件重要事情是 可以通过继承抽象类 java.lang.ClassLoader 类 编写自己的类载入器。而 tomcat 要使用自定义类载入器的原因有3条reasons
r1 为了在载入类中指定某些规则r2为了缓存已经载入的类r3为了实现类的预载入方便使用