JVM的类加载机制

一.JVM的类加载过程总共分为7个步骤:

JVM的类加载机制_第1张图片
七个步骤:加载、验证、准备、解析、初始化、使用、卸载。
可分为:验证、准备、解析这三个阶段统称为链接Linking

加载
类加载的三大步骤:

1.加载
2.链接
3.初始化

类装载器是什么?

就是寻找类的字节码文件,并构造类在JVM内部表示的对象组件。

加载的作用?

查找和导入Class文件:

链接的作用?

把类的二进制数据合入到JVM中,且使之能够执行: 
1. 校验:检查载入的Claa文件数据的证缺陷。 
2. 准备:给类的静态变量分配存储空间。 
3. 解析:将符号引用转成直接引用

初始化的作用?

对类的静态变量,静态代码块执行初始化操作。

Java为何能够动态扩展?

能够在运行时期动态加载和动态链接
可以在运行时在指定其实际的实现:多态
解析过程有时候还可以在初始化之后执行:动态绑定(多态)

链接
链接的作用?

链接,是指将创建的类合并到JVM中,并使之能够执行的过程。
分为:验证、准备、解析三个阶段

初始化
Java中如何初始化一个静态字段?

声明时直接赋值
静态代码块中对其赋值

直接复制的静态字段用final修饰是如何初始化的?

 在类型为基本类型或者字符串是,会被Java编译器标记为常量值ConstantValue
 静态字段会在准备阶段根据ConstantValue直接进行赋值。

双亲委派

双亲委派模型是什么?

 JVM提供了三种类加载器,还有用户自定义的类加载器。这些加载器之间的层次关系被称为类加载器的双亲委派模型。
该模型要求除了顶层的启动类加载器外,其余的类加载器都应该有自己的父类加载器,而这种父子关系一般通过
组合 (Composition)关系来实现,而不是通过继承(Inheritance)。

双亲委派模型的实现方法?

是通过组合关系来实现的,而不是通过继承

双亲委派模型的处理流程

某个类加载器在接收到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,直到启动类加载器。
如果父类加载器可以完成类加载任务,就成功返回
只有父类加载器无法完成此加载任务时,才自己去加载。

双亲委派模型的优点?

 Java类随着它的类加载器一起具备了一种带有优先级的层次关系。
 例如rt.jar中的类java.lang.Object,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端
 的Bootstrap    ClassLoader进行加载,因此Object类在任何情况下都是同一个类。
反例:如果没有双亲委派模型,而是各个类加载器自行加载的话,如果用户编写了一个java.lang.Object的同
名类并放在ClassPath中,那系统中将会出现多个不同的Object类,程序将混乱。

你可能感兴趣的:(jvm类加载过程,JVM,面试)