类加载机制

1 类加载过程
1.1 装载
(1)获取类的全限定类名,把 class 文件转为二进制流
(2)将二进制流中类的描述信息存入方法区中。如:创建时间、版本等...
(3)将 java.lang.Class 对象存入堆中。
1.2 链接
(1)验证:验证被加载类的正确性:如文件的格式,元数据等。
(2)准备:在方法区中为静态变量分配空间,并设置初始值。 (3)解析:把类的符号引用转为直接引用。
符号引用:class 文件定义的内容
直接引用:JAVA 进程中真实的地址
1.3 初始化
为类的静态变量设置默认值、执行静态代码块。
2 类加载器
2.1 分类
不同的类加载器加载不同的类:
启动类加载器(Bootstrap classLoader) : 主要负责加载 JAVA 中的 一些核心类库,主
要是位于/lib/rt.jar 中。
拓展类加载器(Extension classLoader): 主要加载 JAVA 中的一些拓展类,位于
/lib/ext 中,是启动类加载器的子类。
应用类加载器(System classLoader): 主要用于加载 CLASSPATH 路径下我们自己写
的类,是拓展类加载器的子类
2.2 双亲委派模型
如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给
父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,
5 请求最终将到达顶层的启动类加载器。如果父类加载器可以完成类加载任务,就成功返回。
倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载。
类加载机制_第1张图片
面试题:如何打破双亲委派机制? tomcat
自定义类加载器类,继承 ClassLoader 类,重写 loadClass 方法

你可能感兴趣的:(jvm)