当前位置: 首页 > wzjs >正文

jsp做手机网站南通城乡建设局网站招聘

jsp做手机网站,南通城乡建设局网站招聘,汕头网站制作服务商,做网站的规划和设想JVM类加载过程是将类的字节码文件(.class)加载到内存,并转换为运行时数据结构的过程,核心分为加载(Loading)、链接(Linking)、初始化(Initialization)三个阶段…

  JVM类加载过程是将类的字节码文件(.class)加载到内存,并转换为运行时数据结构的过程,核心分为加载(Loading)、链接(Linking)、初始化(Initialization)三个阶段,其中链接又包含验证、准备、解析三个子阶段。以下是详细流程:


1. 加载(Loading)

  • 任务:查找并加载类的二进制数据。
  • 过程
    • 通过类的全限定名(如 com.example.MyClass)获取字节码。
    • 将字节码解析为方法区(元空间)的运行时数据结构。
    • 在堆中创建该类的 java.lang.Class 对象,作为访问方法区数据的入口。
  • 类加载器
    • Bootstrap ClassLoader:加载JRE核心库(rt.jar等),C++实现。
    • Extension ClassLoader:加载扩展库(jre/lib/ext目录)。
    • Application ClassLoader:加载用户类路径(ClassPath)下的类。
    • 自定义ClassLoader:用户可继承 ClassLoader 实现自定义加载逻辑。

2. 链接(Linking)

(1) 验证(Verification)
  • 确保字节码合法且符合JVM规范:
    • 文件格式验证:检查魔数(0xCAFEBABE)、版本号等。
    • 元数据验证:检查继承、方法重写等语义(如是否实现抽象方法)。
    • 字节码验证:分析代码逻辑(如操作数栈类型匹配)。
    • 符号引用验证:检查引用的类/方法/字段是否存在(发生在解析阶段)。
(2) 准备(Preparation)
  • 类变量(静态变量) 分配内存并设置默认初始值(非显式赋值):
    static int value = 123;  // 准备阶段 value = 0,而非123
    
    • 常量(static final)在此阶段直接赋值:
    static final int CONST = 123;  // 准备阶段 CONST = 123
    
(3) 解析(Resolution)
  • 将常量池中的符号引用替换为直接引用
    • 符号引用:用字符串描述引用的目标(如 java/lang/Object)。
    • 直接引用:指向目标在内存中的指针、偏移量等。

3. 初始化(Initialization)

  • 执行类构造器 <clinit>()
    • 为类变量赋显式初始值(如 static int value = 123;)。
    • 执行静态代码块(static {})。
  • 触发条件(首次主动使用类时):
    • 创建实例(new)、访问静态变量/方法。
    • 反射调用(Class.forName())、初始化子类等。
  • 线程安全:JVM保证 <clinit>() 的同步执行。

4. 使用(Using)

  • 类完成初始化后,可正常创建对象、调用方法、访问字段。

5. 卸载(Unloading)

  • 条件:类的 Class 对象无引用,且无存活实例。
  • 由GC回收方法区(元空间)数据。

关键特性

  1. 双亲委派模型

    • 类加载请求先委派给父加载器处理。
    • 避免重复加载,保证核心类安全(如用户无法自定义 java.lang.String)。
  2. 惰性加载

    • 类在首次“主动使用”时才初始化(如 new、访问静态字段等)。
  3. 类加载示例

    public class Main {public static void main(String[] args) {System.out.println(Child.value); // 父类初始化,子类不初始化}
    }
    class Parent {static int value = 10;static { System.out.println("Parent init!"); }
    }
    class Child extends Parent {static { System.out.println("Child init!"); }
    }
    // 输出:Parent init!  10
    

常见问题

  • ClassNotFoundException:类加载器找不到类定义。
  • NoClassDefFoundError:编译时存在类,运行时缺失。
  • 打破双亲委派:如JDBC通过 Thread.currentThread().setContextClassLoader() 实现SPI加载。

理解类加载过程对解决类冲突、热部署、模块化开发等场景至关重要。

http://www.dtcms.com/wzjs/541731.html

相关文章:

  • app下载网站免费营业推广经典案例
  • 网站建设软件kan优秀网站开发
  • 九台网站医院线上预约
  • 个人备案网站描述wordpress 菜单加图标
  • sns社区网站开发烟台做网站哪家做的好
  • 各购物网站销售特点关于建设学校网站的报告书
  • discuz建站教程seo优化推广工程师招聘
  • 专注微信网站建设买卖信息网站
  • 成品网站灬1688湖北城乡住房建设厅网站
  • 松原市建设局网站投诉中心昌大建设怎么样
  • 戴南做网站对电子商务网站建设的感想
  • 上海有哪些优化网站推广公司织梦做的网站如何去掉index
  • 怎么仿照别人网站电商网站建设比较好的
  • 比较好的做简历的网站东莞市做网站的最好的是哪家的
  • 设计网站页面要多少钱wordpress 两个域名
  • destoon 网站搬家最新远程网站建设服务器
  • 做公众号必备的网站营销型网站建设吉林
  • 制作高端网站公司排名如何做网站用户活跃度
  • 周口网站建设公司菜鸟教程网站建设
  • 网站建设 网站制作 网站设计做外贸有免费的网站吗
  • 怎么申请公司注册济南网站优化推广公司
  • 新网站seo优化跨境电商千万别做亚马逊
  • 建站中企动力WordPress允许修改评论内容
  • 做网站设计最好的公司找网站建设
  • 阳江市住房和城乡建设局网站广州天河网站制作
  • 准备建网站该怎么做dz增加网站标签
  • php小型网站开发阿里云网站域名查询
  • 做网站编程的电脑配置重庆市建设工程信息网官网人
  • 眼科医院网站建设方案移动网站设计方案
  • 手机响应式网站建设公司电商新手入门知识