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

java加载详解

  • java
  • 2024-05-13 13:34:12
  • 7876


























阶段 描述
加载 将二进制类文件读入内存并创建一个类对象。
验证 检查字节码是否符合 Java 虚拟机规范。
准备 为静态变量分配内存并初始化默认值。
解析 将类中的符号引用替换为直接引用,例如将对字段和方法的引用替换为指向实际字段和方法的指针。
初始化 执行类中的静态初始化器,并为实例变量分配内存并设置初始值。

专业角度介绍
Java 虚拟机 (JVM) 使用类加载器机制加载类。 类加载器负责查找和加载二进制类文件,并将其转化为 JVM 可以执行的格式。
类加载过程分为5 个阶段:
加载:将类文件读入内存并创建类对象,但此时还不会初始化类中的字段和方法。
验证:检查类文件是否符合 JVM 规范,包括是否损坏、是否包含非法字节码指令等。
准备:为静态字段分配内存并初始化为默认值 (0、null 等)。
解析:将类中的符号引用(指向字段、方法等的引用)替换为直接引用,以便 JVM 可以在运行时快速访问这些成员。
初始化:执行类中的静态初始化器,并为实例字段分配内存并初始化为初始值。
类加载顺序由类加载器的类型决定。 Bootstrap 类加载器加载 Java 核心库,扩展类加载器加载扩展库,系统类加载器加载应用程序的类路径。 类加载器按照父委派模型工作,即一个类加载器会将类加载委托给其父加载器,以此类推。 只有当父加载器无法加载类时,子加载器才会尝试加载。
Java 类加载机制提供了以下优点:
安全:类加载器可以防止加载未经授权的类。
隔离:不同的类加载器可以加载不同的类版本,从而实现代码隔离。
性能:类加载器可以缓存已加载的类,以提高性能。
可扩展性:可以创建自定义类加载器来实现自定义类加载机制。