1-JVM类加载机制
2021-04-09 22:46:30 0 举报
AI智能生成
JVM类加载机制、双亲委派
作者其他创作
大纲/内容
Java代码流程
loadClass()加载过程
加载
在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载(懒加载),例如调用类的 main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的 java.lang.Class对象,作为方法区这个类的各种数据的访问入口
验证
校验字节码文件的正确性:有标准的开头(cafe babe)
准备
给类的静态变量分配内存,并赋予默认值
解析
将符号引用替换为直接引用
静态链接
静态方法指向为内存中的指针
动态链接
运行期间的符号替换为直接引用(符号值的是方法名、方法返回、方法修饰符等都是符号)
初始化
对类的静态变量初始化为指定的值,执行静态代码块
类加载的类型
1、引导类记载器(lib):加载JDK的lib下的核心类包(例:String)
2、扩展类加载器(ext):加载JDK的lib下的ext下的jar包
3、应用类记载器(app):加载自己写的类(target包下)
4、自定义类加载器
Launcher类的初始化
第一步:初始化app加载器
第二步:初始化ext加载器
第三步:ClassLoadder
双亲委派机制
描述
先找父亲加载,不行由儿子加载
为什么由应用加载器开始加载?
应用服务90%的代码都是自己写的
为什么设计该机制?
沙箱安全机制:例自己写的java.lang.String.class类不会被加载,这样便可以防止核心 API库被随意篡改
避免类的重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再加载一 次,保证被加载类的唯一性
全盘负责委托机制
是指当一个ClassLoder装载一个类时,除非显示的使用另外一个ClassLoder,该类 所依赖及引用的类也由这个ClassLoder载入
自定义类加载器
自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法,一个是 loadClass(String, boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空 方法,所以我们自定义类加载器主要是重写findClass方法。
0 条评论
下一页
为你推荐
查看更多