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

乌兰察布网站建设开发网站建设

乌兰察布网站建设,开发网站建设,破解网站后台账号密码,推广策略是什么意思java中类的加载过程 Java 类的加载是 JVM 将 字节码文件(.class 文件)加载到内存并最终转化为运行时数据的过程。它分为以下 五个主要阶段:加载、验证、准备、解析、初始化,每个阶段都有对应的内存位置存储相关信息。以下是类加载…

java中类的加载过程

Java 类的加载是 JVM 将 字节码文件.class 文件)加载到内存并最终转化为运行时数据的过程。它分为以下 五个主要阶段加载、验证、准备、解析、初始化,每个阶段都有对应的内存位置存储相关信息。以下是类加载过程的详细描述,以及各阶段存储的信息和存储位置。


1. 加载(Loading)

过程描述:

  • JVM 根据类的全限定名,通过类加载器(ClassLoader)找到字节码文件,并将其加载到内存中。
  • 加载过程的核心任务是生成一个 Class 对象,表示类的元信息。

主要内容存储:

  • 类的字节码:
    • 从文件系统、JAR 包、网络等位置加载 .class 文件。
  • Class 对象:
    • JVM 在方法区中为类生成一个运行时数据结构(元数据表),并在堆中创建一个对应的 java.lang.Class 对象,以供程序使用。

存储位置:

  • 方法区(由元空间实现):
    • 存储类的结构和元信息。
  • 堆:
    • 存储生成的 Class 对象。

2. 验证(Verification)

过程描述:

  • JVM 验证字节码文件的正确性,确保其符合 JVM 的安全规范,避免恶意代码破坏虚拟机。

验证内容:

  1. 文件格式验证:
    • 检查 .class 文件是否符合 Class 文件格式规范(例如魔数 0xCAFEBABE)。
  2. 元数据验证:
    • 验证类的元信息是否符合要求。
      • 是否有父类(除 java.lang.Object 外)。
      • 接口、字段、方法是否符合规范。
  3. 字节码验证:
    • 检查方法体的字节码指令是否合法。
  4. 符号引用验证:
    • 验证符号引用是否可以解析为实际的字段、方法或类。

存储位置:

  • 方法区:
    • 在验证过程中,类元数据结构可能会被进一步填充或更新。
  • 运行时常量池:
    • 符号引用的验证涉及运行时常量池中内容的检查。

3. 准备(Preparation)

过程描述:

  • 为类的 静态变量 分配内存,并设置默认初始值(零值)。
  • 不执行静态变量的赋值操作(赋值将在初始化阶段完成)。

处理内容:

  • 静态变量:

    • 例如:

      class Example {static int a = 10; // 此阶段 a 的值为 0static final int b = 20; // b 会直接在常量池中赋值为 20
      }
      
    • 静态变量 a 被分配内存并初始化为默认值 0bfinal 修饰的常量)直接存储在运行时常量池中。

存储位置:

  • 堆:
    • 静态变量引用的对象存储在堆中。
  • 方法区:
    • 静态变量的初始值记录在方法区。

4. 解析(Resolution)

过程描述:

  • 将运行时常量池中的 符号引用 转换为 直接引用
  • 符号引用是字面上的逻辑引用(例如类名、字段名),而直接引用是具体的内存地址或偏移量。

解析内容:

  1. 类或接口解析:
    • 将符号引用的类名解析为方法区中对应的类元数据结构。
  2. 字段解析:
    • 将字段名解析为具体字段的内存地址或偏移量。
  3. 方法解析:
    • 将方法名和描述符解析为具体方法的字节码指针。

存储位置:

  • 方法区:
    • 符号引用存储在运行时常量池中,解析后的直接引用存储在类的元数据结构中。
  • 堆:
    • 解析的对象或方法指针可能引用堆内存中的对象实例。

5. 初始化(Initialization)

过程描述:

  • 执行类的 () 方法,完成静态变量的赋值和静态代码块的执行。
  • <clinit>() 方法是由编译器自动生成的,包含所有静态变量的显式赋值语句和静态代码块。

处理内容:

  1. 静态变量赋值:

    • 静态变量被赋予程序中指定的初始值。

      static int a = 10; // 此阶段 a 的值被设为 10
      
  2. 静态代码块:

    • 执行静态代码块中的逻辑。

      static {System.out.println("Class initialized!");
      }
      

存储位置:

  • 方法区:
    • 静态变量的值更新存储在方法区。
  • 堆:
    • 静态变量引用的对象存储在堆中。

类加载过程中数据存储的总结

阶段存储内容存储位置
加载字节码文件、类元数据(类名、字段、方法描述等)、生成 Class 对象。方法区(元空间)存储类元数据,堆存储 Class 对象。
验证验证 .class 文件和符号引用的合法性。方法区(更新类元数据和常量池)。
准备分配静态变量的内存,初始化默认值。方法区存储变量描述,堆存储静态变量的实际值。
解析符号引用解析为直接引用(类、字段、方法的实际地址)。方法区(解析常量池符号引用)。
初始化执行 <clinit>() 方法,完成静态变量赋值和静态代码块执行。方法区存储最终结果,堆存储静态引用的对象。

补充:类加载的触发时机

类的加载可能在以下时机被触发:

  1. 主动引用:
    • 创建类的实例(如 new 操作符)。
    • 访问类的静态字段或调用静态方法。
    • 使用反射操作类。
  2. 被动引用:
    • 子类访问父类的静态字段时,只触发父类加载。
    • 定义数组类型不会触发类加载。

类加载过程是 JVM 高效运行的基础,精确的存储分配和管理确保了类的正确运行和内存的优化使用。

http://www.hengruixuexiao.com/news/22980.html

相关文章:

  • 做外包的网站常用的网络营销方法有哪些
  • 网站首页被k 做跳转赣州网站建设
  • 做网站怎么租个域名seo实战教程
  • 定安免费建站公司重庆seo技术教程博客
  • 东阳网站建设dyfwzx西安企业seo
  • 湛江免费制作网站综合搜索引擎
  • 冬青街 做网站关键词排名优化软件策略
  • 做网站怎么推广域名污染查询网站
  • 怎么做五个页面网站中国推广网
  • 设计网站思路如何写万网创始人
  • 东莞企业网站建设推广网站一级域名和二级域名
  • 凡科免费做网站备案域名查询
  • 网站logo做黑页sem竞价广告
  • 如何做网站软件哪里有营销策划培训班
  • wordpress图文安装杭州龙席网络seo
  • 做网站要会哪些软件现在疫情怎么样了最新消息
  • 河北房地产网站建设上海推广外包
  • dw如何用表格来做网站qq引流推广平台
  • 电商公司网站建设流程seo培训机构排名
  • 化妆品网站设计开题报告中文域名交易平台
  • 王爷轻宠叶珍珍河北seo推广
  • wordpress添加icon文件网络培训seo
  • 前端开发学习网站郑州seo教程
  • 网站建设可以帮助企业百度热议排名软件
  • 竞价网站同时做优化可以吗专业模板建站
  • 做义工的同城网站百度云资源搜索
  • wordpress 段落显示东莞seo代理
  • 简单门户网站模板提交百度收录
  • 做整合营销的网站营销型网站分为哪几种
  • 如何做商业推广网站成都seo优化公司