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

内网网站开发费用泰安网签查询2023

内网网站开发费用,泰安网签查询2023,网页qq登录网站,php企业网站系统类加载过程详解 类加载是 JVM 将类的字节码从磁盘、网络或其他来源加载到内存,并转换为 Class 对象的过程,主要分为以下 五个阶段: 1. 加载(Loading) 任务:查找类的二进制字节流(如 .class 文…

类加载过程详解

类加载是 JVM 将类的字节码从磁盘、网络或其他来源加载到内存,并转换为 Class 对象的过程,主要分为以下 五个阶段


1. 加载(Loading)
  • 任务:查找类的二进制字节流(如 .class 文件、JAR 包、动态代理生成等),并将其转换为方法区的运行时数据结构。
  • 触发条件
    • 首次创建类实例(new)。
    • 访问类的静态字段或方法。
    • 反射调用(如 Class.forName())。
  • 类加载器
    • 引导类加载器(Bootstrap ClassLoader):加载 JRE/lib 核心库(如 rt.jar)。
    • 扩展类加载器(Extension ClassLoader):加载 JRE/lib/ext 扩展库。
    • 应用类加载器(Application ClassLoader):加载用户类路径(-classpath)的类。
    • 自定义类加载器:用户继承 ClassLoader 实现,用于特定场景(如热部署、模块化)。

2. 验证(Verification)

确保字节码符合 JVM 规范,防止恶意代码攻击,具体检查:

  • 文件格式验证:魔数、版本号等是否符合规范。
  • 元数据验证:类是否有父类、是否实现接口等语义检查。
  • 字节码验证:控制流是否合法(如跳转指令不越界)。
  • 符号引用验证:引用的类、方法、字段是否存在(发生在解析阶段)。

3. 准备(Preparation)
  • 任务:为 静态变量 分配内存并设置初始值(零值)。
    • 示例:static int value = 123; 在此阶段 value 被赋值为 0,而非 123
  • 特殊处理:若字段为 final 常量(static final),直接赋真实值(如 static final int value = 123;)。

4. 解析(Resolution)

将常量池中的 符号引用 转换为 直接引用

  • 符号引用:以文本形式描述引用的目标(如 java/lang/Object)。
  • 直接引用:指向目标在内存中的指针、偏移量或句柄。
  • 解析类型:类/接口、字段、方法、方法类型等。

5. 初始化(Initialization)
  • 任务:执行类构造器 <clinit>() 方法,合并所有静态代码块和静态变量赋值操作。
  • 触发条件:类被首次主动使用时(如 new、访问静态字段)。
  • 线程安全:JVM 保证 <clinit>() 方法在多线程下被正确加锁同步。

类隔离的实现与原理

类隔离的核心是通过 不同的类加载器 加载同名类,使 JVM 将其视为不同的类,从而避免冲突。以下是常见实现方式:


1. 类加载器的命名空间
  • 规则:每个类由其加载器和全限定名(如 com.example.MyClass)共同唯一标识。
  • 示例
    ClassLoader loader1 = new MyClassLoader();
    ClassLoader loader2 = new MyClassLoader();
    Class<?> class1 = loader1.loadClass("com.example.MyClass");
    Class<?> class2 = loader2.loadClass("com.example.MyClass");
    // class1 != class2,即使字节码相同
    
2. 双亲委派模型的打破

默认类加载器遵循 双亲委派模型(优先由父加载器加载),但在隔离场景下需打破该模型:

  • 自定义类加载器:重写 loadClass() 方法,直接加载特定路径的类,不委托父加载器。
  • 应用场景
    • Tomcat WebApp 隔离:每个 Web 应用使用独立的 WebappClassLoader,加载 /WEB-INF/classes/WEB-INF/lib 下的类。
    • OSGi 模块化:每个 Bundle 有自己的类加载器,实现动态模块化。
3. 模块化系统(Java 9+)

通过 JPMS(Java Platform Module System) 实现更细粒度的类隔离:

  • 模块描述符(module-info.java):定义模块的导出包和依赖关系。
  • 类可见性控制:未导出的包对其他模块不可见,彻底隔离实现细节。

类隔离的实际应用

场景实现方式优势
多版本库共存不同类加载器加载不同版本的 JAR(如 Log4j 1.x 和 2.x)。避免版本冲突
微服务热部署每个服务使用独立类加载器,重启服务时替换类加载器实现无停机更新。提升系统可用性
插件化架构插件作为独立模块,由专属类加载器加载,主程序通过接口交互。动态扩展功能

🐶

  • 类加载过程:加载 → 验证 → 准备 → 解析 → 初始化,确保类合法且可用。
  • 类隔离机制:通过类加载器命名空间和打破双亲委派,实现多版本共存、模块化等需求。
  • 应用价值:解决依赖冲突、支持热部署、构建灵活架构,是现代 Java 应用的核心技术之一。

在这里插入图片描述

http://www.dtcms.com/a/578143.html

相关文章:

  • 微算法科技(NASDAQ MLGO)采用动态层次管理和位置聚类技术,修改pBFT算法以提高私有区块链网络运行效率
  • 潍坊网络建站模板wordpress 指定页面nofollow
  • 从Hive on YARN到Hive on Spark
  • 创作写作-李劭卓
  • 论文分享 |Spark-TTS:用解耦语音令牌实现高效可控的语音合成
  • Spark 文本分类实战经验总结
  • 英伟达体系内关于 DGX Spark 的讨论观点整理
  • 模版型网站a站为什么会凉
  • 强软弱虚四种引用
  • [Esterel大师课] Gérard Berry:使用Esterel v7进行同步多时钟电路设计(2013)
  • 有什么学做木工的网站吗WordPress添加下载弹窗
  • 目标检测模型SSD详解与实现
  • 网站弹窗广告代码企业官方网站的作用
  • 网站建设排行山西省确诊病例最新情况
  • 线程池浅谈
  • KubeSphere在线安装单节点K8S集群
  • 北京安慧桥网站建设口碑好的家装前十强
  • 著名建筑网站正规的教育机构有哪些
  • Linux - Vault
  • VSCode+Cline部署本地爬虫fetch-mcp实战
  • 使用python-pandas-openpyxl编写运营查询小工具
  • Label Studio 安装与简单使用指南
  • 宁波正规网站seo公司php网站开发机试题目
  • 牛客小白月赛122 D题x_to_y_2
  • 生态环境影响评价图件制作:融合ArcGIS与ENVI,掌握土地利用、植被覆盖、土壤侵蚀、水系提取等专题制图技术!
  • 深入理解 Vue3 Vapor 模式:从原理到实践
  • leeCode hot 100 !!!持续更新中
  • 想学网站建设选计算机应用技术还是计算机网络技术哪个专业啊网站建设工单系统护语
  • WordPress魔方格子做网站优化费用
  • 高校实验室建设方案解析:从规划到落地的全流程指南