• 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 类文件

  • 相关阅读:
    Spring Boot 2.4 手工和 SDKMAN! 安装 Spring Boot 命令行
    Spring Boot 2.4 安装
    Java Web 开发中的中文乱码与解决方式
    项目文件与 SVN 资源库同步提示错误 Attempted to lock an already-locked dir
    JavaScript中的日期时间函数
    jmeter测试 常用数据库的性能
    jmeter 运行多个sql
    Linux 进程管理
    Linux vi 文件编辑
    Linux 常用文件管理命令
  • 原文地址:https://www.cnblogs.com/leifonlyone/p/12410017.html
Copyright © 2020-2023  润新知