美文网首页我爱编程
JVM加载类的时机

JVM加载类的时机

作者: 四喜汤圆 | 来源:发表于2018-07-26 12:59 被阅读16次
image.png

类的生命周期

加载,连接(验证,准备,解析),初始化,使用,卸载

image.png
摘自 深入理解java虚拟机【Java虚拟机类生命周期】

对类的主动引用(5种),会触发类的初始化

Java虚拟机规范中对于类加载的时机没有明确的规范,但是明确规定了有且只有5种情况下,必须立即对类进行初始化。(既然执行了初始化,加载、连接操作肯定在初始化之前已经开始(并不保证结束的顺序)

  • 读取或设置类的静态变量、访问类的静态方法时,若该类还未被初始化,则需先进行初始化
  • 创建类的实例时,若该类还未被初始化,则需先进行初始化
    1. 通过new关键字创建
    2. 通过反射方法(java.lang.reflect)创建
  • 当要初始化一个类时,若其父类还未初始化,则先初始化其父类
  • JVM启动时,会先初始化包含main()方法的类
  • 当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个句柄所对应的类没有进行过初始化,则需先触发其初始化。

上述5种情况称为对类的主动引用,下面介绍几种对类的被动引用情况

对类的被动引用(列举3个),不会触发类的初始化

  • 通过子类引用父类的静态变量,不会触发子类的初始化
// 父类
public class SuperClass{
    public static int a=1;
}

// 子类
public class SubClass extends SuperClass{
    public static void main(String[] args){
        System.out.println(SubClass.a)
    }
}
  • 通过数组定义引用类,不会触发该类的初始化
public class Main{
    public static void main(String[] args){
        SuperClass[] arr=new SuperClass[10];
    }
}
  • 通过类名访问该类中的常量,不会触发该类的初始化
public class ConstClass{
    public static final String HELLO_WORLD="hello";
}

public class Main{
    public static void main(String[] args){
        ConstClass.HELLO_WORLD;
    }
}

参考文献

JVM_周志明

相关文章

  • 8

    1. JVM中加载类的时机具体举例?以及双亲委派加载的机制是什么? (1)JVM中加载类的时机具体举例: 1)使用...

  • 我的秋招之路-面经篇

    Java基础 类加载的时机和类初始化的时机(引出tomcat类加载器)JVM和绝大多数用户自定义的类在JVM启动的...

  • Java基础 (20) 类加载

    1)类加载机制谈谈对ClassLoader(类加载器)的理解2)JVM加载时机与加载过程3)对象创建过程 一. C...

  • JVM加载类的时机

    类的生命周期 加载,连接(验证,准备,解析),初始化,使用,卸载 对类的主动引用(5种),会触发类的初始化 Jav...

  • JVM类生命周期概述:加载时机与加载过程

    写在前面 本文概述了JVM加载类的时机和生命周期,并结合典型案例重点介绍了类的初始化过程,揭开了JVM类加载机制的...

  • 一、类的加载过程

    将.class文件加载到jvm中 一、 加载 :类的加载时机根据下列情况 主动加载实例化一个对象,或者设置调用静态...

  • JVM——类加载机制

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

  • JVM类加载学习二-类加载机制学习

    JVM类加载机制 @(Java)[JVM|类文件结构] [TOC] 基本介绍 JVM的类加载机制:JVM把描述类的...

  • 探究ClassLoader加载机制

    1. 加载时机 调用类构造器 调用类中的静态变量或者静态方法 2. JVM中自带的3个类加载器 Bootstrap...

  • 每天一个知识点(3)--JVM-类加载子系统-类加载器

    JVM的类加载子系统负责加载相关的类,加载类是JVM中类加载器的功能和职责。首先明确下JVM中的类加载器,分为以下...

网友评论

    本文标题:JVM加载类的时机

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