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

    JVM类加载过程:加载,验证,准备,解析,初始化,使用,卸载。

    1、加载

    加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。

    2、验证

    确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,例如JVM规范校验。

    3、准备

    为类变量分配内存并设置类变量的初始值阶段,其他的如类成员变量将不会进行初始化。如下

    public static int num = 12306

    此处的num将被赋值默认值0而不是12306,若是再加上final修饰则只将赋值,如

    publib static final int num = 12306

    此时类变量num将被直接赋值12306

    4、解析

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

    5、初始化

    该阶段开始执行自定义的java程序代码,JVM会根据语句执行顺序对类对象进行初始化。

    以下几种情况不会执行类初始化:

    • 通过子类引用父类的静态字段,只会触发父类的初始化,而不会触发子类的初始化。
    • 定义对象数组,不会触发该类的初始化。
    • 常量在编译期间会存入调用类的常量池中,本质上并没有直接引用定义常量的类,不会触发定义常量所在的类。
    • 通过类名获取Class对象,不会触发类的初始化。
    • 通过Class.forName加载指定类时,如果指定参数initialize为false时,也不会触发类初始化,其实这个参数是告诉虚拟机,是否要对类进行初始化。
    • 通过ClassLoader默认的loadClass方法,也不会触发初始化动作。

    6、使用

    从入口方法开始执行用户的程序代码。

    7、卸载

    程序执行完后,JVM开始销毁创建的Class对象,最后负责运行的JVM也退出内存。

  • 相关阅读:
    解决方案-BI:百科
    un-Error-ASP.NET:“/tbm6”应用程序中的服务器错误。
    JS-jQuery-EasyUI-Layout-Tabs:Tabs 标签页/选项卡
    JS-jQuery-EasyUI-Layout:Layout 布局
    jQuery-EasyUI-CSS:Icon 图标
    jQuery-EasyUI:Layout
    JS-jQuery-EasyUI:CSS
    JS-jQuery-EasyUI :目录
    ORM:百科
    ORM- IBatisNet:百科
  • 原文地址:https://www.cnblogs.com/kingsonfu/p/10485102.html
Copyright © 2011-2022 走看看