zoukankan      html  css  js  c++  java
  • 类虚拟机类加载机制(1)

    一 类加载的注意点

                        以下部分也可以称为连接

    首先类加载的过程: 加载  -------》验证-------》准备--------》解析---------》初始化----------》使用---------》卸载

    声明一下 以下的 ”类型“ 代表的是class文件中代表Java语言的一个类或者接口的可能。

    1 对于"加载"这个阶段 《Java虚拟机规范》没有规定什么什么时候加载,可以由JVM自行决定。

    2 但是在初始化的过程中由6种情况必须立即要对类进行初始化。

     1)当遇到new,getstatic,putstatic,invokestatic这四条指令,如果类型没有初始化,则需要进行初始化。以下的场景会生成以上的四条指令。

        * 使用关键字实例化对象的时候。

        * 读取或者设置一个静态化的字段。

        * 调用一个静态的方法。

     2)使用java.lang.reflect包的方法对类型进行反射调用的时候,如果类型没有进行过初始化,则需要进行初始化。

     3)当初始化该类的时候,发现该类的父类没有进行初始化,则需要先对其父类进行初始化。

     4)当虚拟机启动的时候,用户需要指定一个要执行的主类,虚拟机会先启动这个类。

     5)当使用JDK7的动态语言支持的时候,最后解析为REF_getStatic,REF_putStatic,REF_invokeStatic,REF_newInvokeSpecial这四种方法句柄,如果这四种对应的类没有进行初始化,则先进行初始化。

        6)当接口中定义JDK8新加入的默认方法,如果这接口的实现类发生了初始化,那该接口应该在其之前进行初始化。

    最后

    类的加载过程和接口的加载过程不同

    其实接口也有加载的过程,而且在加载过程中编译器也会接口生成”<clinit>()“类构造器的。

    而且最主要的是接口和类加载的不同在于这6中”有且仅有“需要初始化的场景的第三种:当接口在初始化的过程中是,不需要父类接口全部完成初始化,当真正使到父类接口的时候才会初始化。

  • 相关阅读:
    刷水题(四)
    C++如何调试
    刷水题(三)
    刷水题(二)
    虔诚的墓主人(BZOJ1227)(洛谷P2154)解题报告
    同余方程组(EXCRT)(luogu4777)
    数据结构——树状数组详解
    程序自动分析(NOI2015)(洛谷P1955)题解
    小胖的奇偶(Viojs1112)题解
    小胖守皇宫(VIJOS P1144 )题解
  • 原文地址:https://www.cnblogs.com/linyu1/p/14319307.html
Copyright © 2011-2022 走看看