四 Java面试之JVM复习

JVM类加载机制分为五个部分:加载 , 验证 , 准备 , 解析 , 初始化

四 Java面试之JVM复习

文章插图
方式/
加载:这个阶段会在内存中生当作一个代表这个类的java.lang.Class对象 , 作为方式区这个类的各类数据进口 。 要注重的是这里纷歧定非要从一个Class文件获取 , 这里既可以从ZIP包中读取(好比jar包和war包中读取) , 也可以在运行时计较生当作(动态代办署理) , 也可以由其它文件生当作(好比将JSP文件转换当作对应的Class类) 。


验证:这一阶段本家儿如果为了确保Class文件的字节省中包含的信息是否合适当前虚拟机的要求 , 而且不会风险虚拟机自身的平安 。


筹办:正式为类变量分派内存并设置类变量的初始值阶段 , 即在方式区平分配这些变量所利用的内存空间 。 注重这里按图必然义 , 现实上变量v在筹办阶段事后的初始值为0而不是8080 , 将V赋值为8080的put static 指令是程序被编译后 , 存放于类机关器<client>方式之中 。 可是若是按图二声明 , 在编译阶段会为v生当作ConstantValue属性 , 在筹办阶段虚拟机遇按照ConstantValue属性将v赋值为80800
四 Java面试之JVM复习

文章插图

四 Java面试之JVM复习

文章插图

解析:虚拟机将常量池中的符号引用替代为直接引用的过程 。 符号引用就是
class文件中的:
【四 Java面试之JVM复习】1.CONSTANT_Class_info   
2.CONSTANT_Field_info
3.CONSTANT_Method_info
等类型的常量 。
四 Java面试之JVM复习

文章插图

初始化阶段是类加载最后一个阶段 , 前面的类加载阶段之后 , 除了在加载阶段可以自界说类加载器以外 , 其它操作都由JVM本家儿导 。 到了初始阶段 , 才起头真正执行类中界说的java程序代码 。
四 Java面试之JVM复习

文章插图

类加载器: 虚拟机设计团队把加载动作放到JVM外部实现 , 以便让应用程序决议若何获取所需的类 , JVM供给了3种类加载器:
     1.启动类加载器:负责加载JAVA_HOME\lib目次中的 , 或经由过程-Xbootclasspath参数指定路径中的 , 且被虚拟机承认(按文件名识别 , 如rt.jar)的类 。


     2.扩展类加载器:负责加载JAVA_HOME\lib\ext目次中的 , 或经由过程java.ext.dirs系统变量指定路径中的类库 。


     3.应用程序类加载器:负责加载用户路径(classpath)上的类库 。 JVM经由过程双亲委派模子进行类的加载 , 当然我们也可以经由过程担当java.lang.ClassLoader实现自界说的类加载器 。
四 Java面试之JVM复习

文章插图

双亲委派:当一个类收到类加载请求 , 他起首不会测验考试本身加载这个类 , 而是把这个请求委派给父类区完当作 , 每一个条理类加载器都是如斯 , 是以所有的加载请求都应该传动到启动类加载器中 , 只有当父类加载器反馈本身无法完当作这个请求的时辰(在它的加载路径下没有找到所需加载的Class) , 子类加载器才会测验考试本身去加载 。

推荐阅读