美文网首页
类加载机制

类加载机制

作者: Burlong | 来源:发表于2021-09-13 10:15 被阅读0次
image.png

一、加载

io读取类全限定名(包名+类名),找到.class二进制文件,映射成jvm能识别到结构,然后加载至内存中,生成Class对象。

二、链接

1、验证

  • 第一阶段,文件格式的验证,比如验证字节码是否符合jvm加载规范,比如是否以魔数OXCAFEBABE开始。
  • 第二阶段,验证元数据。比如非抽象类,是否实现了父类接口中要求实现的方法。
  • 第三阶段,字节码验证。验证语义是否合法。
  • 第四阶段,符号引用验证。比如通过全限定名是否能找到对应的类。符号引用的类、方法等是否可以被当前类访问到(权限控制)。

2、准备

为静态变量分配内存、初始化值,比如int类型初始值是0。被final修饰的static字段不会设置,因为final在编译的时候就分配了。

3、解析(很重要的一步,并非顺序执行)

将常量池(根据字节码解析出来的常量池,而非我们常说到方法区中的常量池)中的符号引用转为直接引用。加入符号引用指向了一个未加载的类或其属性,会触发加载该类(但未必触发该类的链接以及初始化)。简单来说就是将指向常量池的引用指针,转换为指向内存的引用指针。 注意:解析器往往可能是在初始化之后才执行。

Q:为什么不一定在类加载时就执行?

虚拟机实现可以根据需要来判断到底是在类被加载器加载时就对常量池中的符号引用进行解析,还是等到一个符号引用将要被使用前才去解析它。

另外,只有当对类的主动使用的时候才会导致类的初始化,类的主动使用包括以下八种:

  • 创建类的实例,也就是new的方式
  • 访问某个类或接口的静态变量,或者对该静态变量赋值
  • 调用类的静态方法
  • 通过反射调用类
  • 初始化某个类的子类,则其父类也会被初始化
  • 如果一个接口声名了非抽象、非静态的方法,对直接或者非直接实现该接口的子类进行初始化时,该接口也会被初始化
  • 使用动态代理时,会初始化被代理类
  • 自jdk8后,接口中加入了默认方法(通过default关键字修饰),接口的实现类发生了初始化,则该接口作为父类要先进行初始化

三、初始化

执行静态初始化器和静态初始化成员变量(如前面只初始化了默认值的static变量将会在这个阶段赋值,成员变量也将被初始化)。初始化就是执行类的构造器方法init()的过程。init()是javac编译器自动收集类中所有类变量的赋值动作和静态代码块中的语句合并来的,并不需要程序手动实现。另外如果该类具有父类,jvm会保证父类的init()方法先执行,然后再执行子类的init()(也就是构造器中的隐式super()。)

Q:何时触发类加载?

new Object() Class.forName().newInstance() 使用Constructor类的newInstance方法 包含main函数的类(待验证)

参考文献:

https://segmentfault.com/a/1190000037574626

相关文章

  • 类加载机制(一)

    加载机制系列类加载机制(一)类加载机制(二)类加载机制(三) 类加载机制 1.JVM把class文件加载到内存,对...

  • 类加载机制(三)

    加载机制系列类加载机制(一)类加载机制(二)类加载机制(三)类加载器 这里引用尚学堂的的几张图片 demo: 结果:

  • JVM——类加载机制

    前言 今天就来介绍类的加载机制以及双亲委派机制。 JVM 类加载机制 JVM 类加载的五个阶段 JVM 类加载机制...

  • 类加载机制(二)

    加载机制系列类加载机制(一)类加载机制(二)类加载机制(三)类的加载全过程中的主动引用与被动引用 类的主动引用(会...

  • 类加载机制

    类加载机制 类加载机制是指 .class文件加载到JVM,并形成Class对象的机制。 类加载机制可以在运行时动态...

  • 从萌新的角度理解Java类加载机制

    类加载机制 本文主要是对java中类加载机制的入门级别文章,主要介绍类加载机制基本概念,以及类加载机制主要内容。本...

  • 从类加载开始的JVM学习

    目录 引言 java类加载流程 java类加载机制- 类加载原理- 双亲委派机制 Tomcat中双亲委派机制的应用...

  • java基础知识,JVM虚拟机类加载机制

    知识要点: 类加载机制简介 类加载机制流程 类加载机制简介 虚拟机把描述类的数据从Class文件加载到内存,并对数...

  • 【JAVA】京东一面

    1、类加载机制概念、加载步骤、双亲委托机制、全盘委托机制、类加载器种类及继承关系 2、如何实现让类加载器去加载网络...

  • 3:类加载机制深度解析(Tomcat打破双亲委派机制)(文末有项

    1:Tomcat的类加载机制 2:Tomcat的类加载机制流程图 3:Tomcat的类加载机制总结 4:代码实战 ...

网友评论

      本文标题:类加载机制

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