类加载的过程
2019-12-24 10:40:58 0 举报
类加载的过程
作者其他创作
大纲/内容
执行类构造器<clinit>()方法的过程
初始化Initialization
①通过一个类的全限定名来获取定义此类的二进制字节流②将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构③在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
目的是为了确保Class文件的字节流中包含的新消息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全
正式为类表量分配内存并设置类变量初始值的阶段,这些变量所使用的内存都将在方法区中进行分配
虚拟机将常量内的符号引用替换为直接引用的过程
解析Resolution
当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个句柄所对应的类没有进行初始化,则需要先触发其初始化。
使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
加载Loading
验证Verification
使用Using
有且只有5种情况必须立即对类进行“初始化”
卸载Unloading
连接(Linking)
当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先出发父类的初始化
当虚拟机启动时,用户需要指定一个需要执行的主类(包括main()方法的那个类),虚拟机会先初始这个主类
准备Preparation
遇到new,getstatic,putstatic和invokestatic这4条字节码指令时,如果类没有初始化过,则需要先触发其初始化。
收藏
收藏
0 条评论
下一页