Java虚拟机学习摘要

来源:互联网 发布:淘宝产品视频制作价格 编辑:程序博客网 时间:2024/06/05 20:16

按照《深入理解JAVA虚拟机》中间的原理,讲虚拟机记载一个类的而整个过程理解记录了下,一共分为7个过程,从加载到最终的卸载:

虚拟机加载基本过程

其中,加载、验证、准备、初始化和卸载是按照顺序确定的,但是其它就不一定了。

关于加载,想从几个方面说下:

  • when?
    何时加载一个类,虚拟机的规范中没有说明,该书中换了一个角度,从虚拟机初始化的条件来讲虚拟机加载类的时间。Java虚拟机规范中,规定了虚拟机初始化类的5中条件:
    0).遇到new、getstatic、pustatic或者invokestatic 这四个指令的时候。
    1).使用java.lang.refect对类进行反射调用的时候。
    2).初始化一个类的时,会触犯其父类初始化。
    3).虚拟机启动时候的包含main方案的类。
    4).当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethondHandle 实例最后的解析结果REF_getstatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有经过初始化,则先必须进行初始化。
  • where?
    通过类的一个全限名来获取定义次类的二进制字节流。
    因为获取到的类只是说明字节流中获取,那么其实没有限定从文件中获取。所以获取的来源很广:1、从class文件。2、zip、jar、war等类型的压缩文件。3、网络从获取。4、动态代理技术。5、其它文件,例如JSP。5、从其它地方获取。
    • who?
  • -
0 0
原创粉丝点击