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

    虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化。最终形成可以被虚拟机直接使用的java类型。

    加载:

    类从被加载到虚拟机内存开始,到卸载出内存为止。整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3各部分统称为连接

    加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后在开始,这是为了支持java语言的运行时绑定(也称为动态绑定或晚期绑定)

    类初始化有且只有5种情况(加载、验证、准备自然要在此之前开始):
    1、遇到new、getstatic、putstatic或者invokestatic这四条字节码指令时,如果类没有进行过初始化,则需要先出发其初始化。
    2、使用java.lang.reflect包的方法对类进行反射调用的时候,如果类还没进行过初始化
    3、当初始化一个类的时候,如果发现其父类还没有进行过初始化
    4、虚拟机启动时,用户指定要执行的main类
    5、当使用jdk1.7动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄
    类加载时需要加载的二进制字节流可以从文件、zip包、网络、运行时计算、数据库等地方获取

     加载阶段尚未完成,连接阶段可能已经开始 加载阶段与连接阶段的部分内容(如一部分字节码文件格式验证动作)是交叉进行的

    验证

    确保class文件中的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全

    ...

    环境中替换jar包中class文件,高版本向下兼容。 用jdk1.7编译一个class文件替换 1.8的jar包中同名文件 运行不会报错

    设置临时jdk(当前窗口有效):

    set JAVA_HOME=C:Program FilesJavajdk1.7.0_80

    set PATH=%JAVA_HOME%in;%JAVA_HOME%jrein;

    set CLASSPATH=.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar

    class 类文件

  • 相关阅读:
    int 类型 占多少字节是由什么决定的
    layer.js漂亮的弹出框
    jquery分页点击后页面置顶
    动态请求页面生成静态页
    弹出ifame页面(jquery.reveal.js)
    Request.QueryString["id"] 、Request.Params["id"] 的强大
    为什么现在改用int.TryParse了
    时间格式(例如:2015-11-09)
    返回前一页
    sql获得某个时间段的数据
  • 原文地址:https://www.cnblogs.com/leifonlyone/p/12410017.html
Copyright © 2011-2022 走看看