码迷,mamicode.com
首页 > 其他好文 > 详细

第七章——虚拟机类加载机制——学习总结

时间:2017-06-07 14:17:12      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:字节   需要   http   实现   1.5   例子   自身   机制   lang   

类的生命周期

技术分享

7.2、开始类加载、类初始化的时机。

  1)类加载过程的第一个阶段:加载。虚拟机规范中没有进行强制约束,交由具体的虚拟机实现来自由把握。

  2)初始化 阶段,虚拟机规范中严格规定了有且只有4种情况必须立即对类进行“初始化”(加载,验证,准备自然在初始化之前开始)。

    a)遇到new、getstatic、putstatic、invokestatic四条字节码指令时,若类没被初始化,则要立即初始化。

    b)使用java.lang.reflect包的方法对类进行反射调用时,若类没被初始化,则要立即初始化。

    c)当初始化一个类时,若它的父类还没被初始化,则需先初始化父类。

    d)当虚拟机启动时,用户需要指定一个要执行的主类(包括main()方法的那个类),虚拟机会先初始化这个主类。

  以上四种情况的行为称作对一个类的主动引用。除此之外所有引用类的方式,都不会触发类的初始化,称为被动引用。

  以下贴3个被动引用的场景例子:

  技术分享

  技术分享

  技术分享

  扩展:

  技术分享

7.3类加载过程,具体动作。

  1.加载:

    技术分享

    技术分享技术分享

    虚拟机规范的这三点比较笼统,具体实现上灵活度高。

  2.验证:  

    这一阶段的目的:为了确保class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全。

    技术分享

    1.文件格式验证:

    技术分享

    2.元数据验证:主要检查语言规范。

    技术分享

    3.字节码验证

    技术分享

    4.符号引用验证

    技术分享

    总结:

    技术分享

7.3准备

   准备阶段是正式为类变量(被static修饰的变量)分配内存并设置初始值(数据类型的“零值”)的阶段,这些内存都将在方法区中分配。

  举例:

    public static int value = 123;在此阶段,它的零值是   0;

    public static int value = 123;在此阶段,它的零值是   123;

    零值对应表:

      技术分享

7.4解析

  是虚拟机将常量池中的符号引用替换为直接应用的过程。

  技术分享

  技术分享

7.5初始化

  技术分享

  技术分享

  技术分享

 

类加载器

  1、什么是类加载器。

    技术分享

  技术分享

    技术分享

    技术分享技术分享

    

 

 

 

 

 

 

 

 

 

 

    

 

第七章——虚拟机类加载机制——学习总结

标签:字节   需要   http   实现   1.5   例子   自身   机制   lang   

原文地址:http://www.cnblogs.com/wzk1992/p/6956457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!