1 类加载机制
2022-07-31 11:12:50 0 举报
AI智能生成
jvm类加载机制
作者其他创作
大纲/内容
类加载的过程
loadClass加载类
加载
验证
验证字节码文件正确性
准备
静态变量分配内存和赋值
解析
符号引用替换直接引用
字面量替换成内存的指针(或者偏移量、句柄)
静态链接
编译期间完成
动态链接
运行期间完成
初始化
初始化静态变量
执行静态代码
运行时常量池、类型信息、字段信息、方法信息、类加载器的引用、对应class实例的引用
使用
卸载
类加载器
4种类加载器
引导类加载器
加载jre/lib下的核心类库
扩展类加载器
加载jre/lib/ext下的jar
应用程序加载器
加载classPath下的自己写的类
自定义加载器
加载用户自定义路径下的类包
自定义类加载器
只需继承java.lang.ClassLoader
loaderClass方法实现双亲委派机制,不需要重写
重写findClass方法<br>
双亲委派机制
类加载器亲子级结构
先找父亲加载,不行再由儿子自己加载,加载过就不会加载<br>
为什么要设计双亲委派机制
沙箱安全机制
自己写的和api一致的类不会被加载
防止核心api被篡改
避免类的重复加载
保证被加载的类唯一性
打破双亲委派机制
tomcat打破双亲委派机制
为何要打破
多个应用程序独立且相互隔离、容器依赖的类库与应用隔离
相同类库相同版本可以共享
jsp修改后不用重启
自定义类加载器详解
类加载器委派关系
<br>
4种类加载器
CommonClassLoader
基本类加载器,加载的可以被tomcat容器和应用访问
CatalinaClassLoader
私有类加载器,只能容器访问
SharedClassLoader
共享类加载器,应用共享,tomcat容器不可见
WebAppClassLoader
应用类加载器,只对当前应用可见
同一个jvm非亲子关系的加载器加载的相同包下的相同类可以共存
如何打破
自定义类加载器,继承ClassLoader类,重写loadClass方法
使用线程上下文类加载器
0 条评论
下一页