8.1 动态连接和解析
class文件会把所有引用放在一个地方--常量池
运行时常量池分配在方法区,属于方法区一部分
概念: 静态常量池(static constant pool)和动态常量池(dynamic constant pool)
动态链接:
解析:
8.1.1
Class.forName()和ClassLoader.loadClass()区别:最大区别可能类型装载器不同
1. 初始化用forName()
2.如果需要一个特定的装载类型,比如从网路上装载、从数据库装载、从加密文件装载 用户就需要定制自己的类装载器了
还有一点就是安全方面考虑 命名空间和保护域
8.1.4 解析CONSTANT_class_info入口
1.在所有常量池入口类型中 CONSTANT_class_info解析起来最复杂
步骤一
2.装载类型或者任何超类行
3.检查访问权限
步骤二
连接并初始化类型和任何超类
校验类型
准备类型
可选解析类型
初始化类型
定义类装载器
初始化类装载器
装载约束,一个java类型在编译时是唯一的,但是在运行期,不同类装载器可以装载同一个类型