美文网首页
JVM类加载的步骤顺序居然还会变?

JVM类加载的步骤顺序居然还会变?

作者: 摸摸脸上的胡渣 | 来源:发表于2020-01-31 17:05 被阅读0次

1.缘由何起

看到一个问题,问题是

类加载机制,一个类加载到虚拟机中一共有几个步骤,这些步骤的顺序哪些是固定的,哪些是不固定的,为什么不固定?

这个问题看得我有点懵,难道类加载的步骤顺序还是根据某些条件的变化而改动的?之前看周志明大神的JVM书籍时好像并没有印象啊?
看来确实有遗漏,补习一下相关知识。

2.JVM类加载基础知识

在看到这个问题时,其实对类加载的步骤已经有些遗忘了,自己再简单的记录一遍,顺便帮读者们温习一下。

加载:根据类路径将硬盘上的.class文件加载进内存,加载时用到了双亲委派机制。
校验:JVM作为成熟的商用虚拟机标准,肯定要对各种输入进行仔细的检查和校验,防止hacker攻击。
准备:为类中的static字段和static final字段开辟空间,将类中的static字段赋默认值,为static final字段赋初始化值。
解析:将有变量、方法等元素的 符号引用 指向 直接引用 。
初始化:将static字段赋初始化值以及相应的类初始化工作。
使用:在程序中使用Class对象。
卸载:当不再以任何形式引用到该类对象及其变量,并且相应的ClassLoader也已经被卸载,这个时候该类可被卸载。

3.静态绑定和动态绑定

程序中绑定的概念:将一个字段或者方法调用与实际的类关联起来。
白话解释:我在使用一个变量或者方法时,需要知道方法或者变量属于哪个类,将方法和变量与对应的类进行关联的过程,称之为绑定。
静态绑定指的是在代码的编译期就已经能够获取到关联的类信息;
动态绑定指的是编译期获取不到,只有程序运行期才能知晓关联的类信息;

3.1 动态绑定 - @Override

解释到这里,动态绑定最常见的场景想必大家都已经想到了,就是重写和实现。在编译期时,存在父类子类方法的重写&接口和实现类对接口方法的实现的相关情况,仅凭静态的代码符号并不能确定关联的类。只有在运行期,JVM能够获取到运行的上下文,才能推断出到底哪个类才是最终要绑定的类,才能获取到最终的直接引用,而确定直接引用的步骤,称之为——解析

3.2 静态绑定 - static construct final private

相比于动态绑定,静态绑定是在编译器就可以确定关联类信息的,比如private方法,只有该类的实例对象才能调用,不会出现实现或者重写等行为,所以private方法的解析,在准备步骤后就会执行。construct method,final method,static method同理。

4.结论

解析这步骤的顺序是不确定的,当存在动态绑定情况时,解析出现在程序的运行期,而静态绑定相关的解析存在程序的编译期。

所以类加载完整的顺序为
1.加载
2.校验
3.准备
4.静态解析(如有必要)
5.初始化
6.使用
7.动态解析(如有必要)
8.卸载

参考

【深入理解JVM】:类加载机制
是的!又一篇Java类加载介绍!

相关文章

  • JVM类加载的步骤顺序居然还会变?

    1.缘由何起 看到一个问题,问题是 类加载机制,一个类加载到虚拟机中一共有几个步骤,这些步骤的顺序哪些是固定的,哪...

  • 类加载

    jvm的类加载,可以分为以下3个步骤 加载 加载,是指jvm借助类加载器查找字节流,并且据此创建类的过程。对于数组...

  • JAVA学习笔记0x03

    类加载 把.class文件从硬盘读取到内存(jvm)中,将这个过程称为类加载 jvm搜索.class文件位置的顺序...

  • JVM系列:(六)JVM类加载步骤

    原文链接:JVM系列:(六)JVM类加载步骤 一 什么是类加载 上一章我们了解了class文件存储结构,在clas...

  • 类加载机制及反射

    类加载步骤JVM类加载分为5个过程:加载,验证,准备,解析,初始化,使用,卸载 加载将.class文件或者其他文件...

  • 06 | JVM-类的加载

    类的加载步骤 JVM加载类的过程大致分为三步,装载(Load),连接(Link),初始化(Initialize) ...

  • java基础知识4-classload

    1.什么是classload 类加载器,用于将class文件加载到jvm虚拟机内 2.加载顺序 3编写自定义类加载...

  • 【Java基础】类加载过程

    要点:1、类加载机制的原理2、程序初始化的顺序3、类加载的代理模式(双亲委托机制) 一、类加载机制 JVM把cla...

  • 《深度拆解Java虚拟机》之Java虚拟机是如何加载Java类的

    一、JVM的类加载 Java 虚拟机中的类加载,从 class 字节码文件到内存中的类,按先后顺序需要经过加载、链...

  • 2019-08-18

    创建对象的过程 ①类加载检查: JVM将类加载过程分为五个步骤: 1) 装载:查找并加载类的二进制数据 ; 2)...

网友评论

      本文标题:JVM类加载的步骤顺序居然还会变?

      本文链接:https://www.haomeiwen.com/subject/ywbgthtx.html