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方法
双亲委派机制
类加载器亲子级结构
先找父亲加载,不行再由儿子自己加载,加载过就不会加载
为什么要设计双亲委派机制
沙箱安全机制
自己写的和api一致的类不会被加载
防止核心api被篡改
避免类的重复加载
保证被加载的类唯一性
打破双亲委派机制
tomcat打破双亲委派机制
为何要打破
多个应用程序独立且相互隔离、容器依赖的类库与应用隔离
相同类库相同版本可以共享
jsp修改后不用重启
自定义类加载器详解
类加载器委派关系
4种类加载器
CommonClassLoader
基本类加载器,加载的可以被tomcat容器和应用访问
CatalinaClassLoader
私有类加载器,只能容器访问
SharedClassLoader
共享类加载器,应用共享,tomcat容器不可见
WebAppClassLoader
应用类加载器,只对当前应用可见
同一个jvm非亲子关系的加载器加载的相同包下的相同类可以共存
如何打破
自定义类加载器,继承ClassLoader类,重写loadClass方法
使用线程上下文类加载器
0 条评论
下一页