Java 的类加载过程是怎样的?

打印 上一主题 下一主题

主题 1374|帖子 1374|积分 4122

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Java 的类加载过程

<hr> 问题

Java 的类加载过程是怎样的?
<hr> 解答

Java 的类加载过程是将 .class 文件中的字节码加载到 JVM 中,并进行验证、剖析和初始化,最终使类可以或许利用的过程。整个类加载过程由以下三个阶段组成:加载(Loading)毗连(Linking)初始化(Initialization)
<hr> 类加载过程详解

1. 加载(Loading)

加载是类加载的第一个阶段,包罗以下内容:


  • 寻找和加载类的二进制数据
         
    • 通过类的全限定名定位 .class 文件。   
    • 支持从多种泉源加载(如文件体系、网络、JAR 包等)。  
      
  • 将类的字节码读入内存
         
    • 将 .class 文件中的内容读取到 JVM 内部的运行时数据区(方法区)。  
      
  • 生成 Class 对象
         
    • 在 JVM 的方法区中生成类的 Class 对象,用于表示这个类的元数据。  

<hr> 2. 毗连(Linking)

毗连阶段将类的二进制数据组合进 JVM,同时验证和预备类。包罗以下三个子阶段:

  • 验证(Verification)
         
    • 确保类的字节码符合 JVM 规范。   
    • 验证内容:
             
      • 文件格式查抄(例如魔数是否正确)。     
      • 元数据查抄(类的字段、方法是否合法)。     
      • 字节码验证(是否符合 Java 语言规则)。   
         
    • 目的:保证字节码的安全性和可靠性。  
      
  • 预备(Preparation)
         
    • 为类的静态变量分配内存,并初始化为默认值。
             
      • 基本类型:分配初始值(如 0、null 等)。     
      • 引用类型:初始化为 null。   
         
    • 仅仅分配内存,未实行任何逻辑。  
      
  • 剖析(Resolution)
         
    • 将常量池中的符号引用(Symbolic References)转换为直接引用(Direct References)。
             
      • 符号引用:以字符串形式描述引用的类、方法、字段等。     
      • 直接引用:运行时的内存地点。   
         

<hr> 3. 初始化(Initialization)

初始化是类加载的最后阶段,主要任务是:


  • 实行类的静态初始化块(static {})和静态变量的初始化。
  • 按顺序实行类的静态变量和静态块,确保只实行一次。
  • 假如父类未被加载,先加载父类。
  1. class Example {
  2.    
  3.     static int x = 10;
  4.     static {
  5.    
  6.         System.out.println("Static block executed.")
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表