JVM 每个类加载阶段分别做了什么?

Java领域JVM的类加载的链接阶段 本文旨在全面解析JVM类加载过程中的链接(Link)阶段,包括其三个核心子阶段:验证(Verification)、准备(Preparation)和解析(Resolution)。我们将深入探讨每个阶段的技术实现细节,分析其对Java程序运行的影响,并提供实际应用中的优化建议。文章首先介绍类加载的整体流程,然后重点聚焦链接阶段。我们将依次分析验证、准备和解析三个子阶段,包括其算法原理、数学基础和实际案例。最后讨论性能优化和常见问题解决方案。类加载器(ClassLoader) 阅读详情

JVM 类加载过程是 Java 虚拟机 (JVM) 将 .class 文件中的字节码加载到内存中,并使其可以在程序运行时使用的过程。这个过程主要分为五个阶段:加载 (Loading)、链接 (Linking) (又细分为验证 (Verification)、准备 (Preparation)、解析 (Resolution)) 和 初始化 (Initialization)。 虽然规范中还提到 使用 (Using) 和 卸载 (Unloading) 阶段,但这两个阶段通常不被视为类加载的 核心 阶段,且卸载在实际应用中发生得很少,尤其是在 HotSpot VM 等主流虚拟机上。

下面详细解释每个阶段的主要工作:

1. 加载 (Loading)

  • 目的: 找到并读取类的字节码,创建 java.lang.Class 对象。
  • 主要工作:
    • 通过类的全限定名获取定义此类的二进制字节流。 这个字节流可能来自多种来源,例如:
      • 本地文件系统中的 .class 文件 (最常见)
      • JAR 或 WAR 包中的 .class 文件
      • 网络 (例如,Applet 或 Web Start 应用)
      • 运行时动态生成 (例如,动态代理)
      • 数据库等其他存储介质
      • 由其他字节码生成器生成 (例如,JSP 编译后的 .class 文件)
    • 将这个字节流所代表的静态存储结构转化为方法区 (Method Area) 的运行时数据结构。 方法区是 JVM 运行时数据区的一部分,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
    • 在内存中生成一个代表这个类的 java.lang.Class 对象。 这个 Class 对象作为程序访问方法区中这个类的各种数据的入口。注意,Class 对象是 在方法区 而不是在 Java 堆中实例化的,尽管它也是对象。

加载阶段: 简单来说,加载阶段就是把类的字节码从各种来源加载到 JVM 的方法区,并在方法区中创建该类的运行时数据结构,同时在内存中创建一个 Class 对象作为入口。

2. 链接 (Linking)

链接阶段负责将加载到 JVM 中的二进制字节码进行校验、准备和解析,使其成为可以被 JVM 执行的运行时环境的一部分。链接阶段又细分为三个子阶段:

  • 2.1 验证 (Verification)

    • 目的: 确保 Class 文件的字节流中包含的信息符合当前虚拟机的规范,并且不会危害虚拟机自身的安全。这是链接阶段最重要,但耗时也最长的阶段。
    • 主要工作: 验证从字节码流中读取的信息是否符合规范,包括:
      • 文件格式验证: 验证字节流是否符合 Class 文件格式规范 (例如,魔数、版本号等)。
      • 元数据验证: 对类的元数据信息进行语义校验,例如:
        • 是否有父类 (除了 java.lang.Object)
        • 父类是否被 final 修饰
        • 抽象类是否实现了所有接口或抽象方法
        • 字段、方法是否与父类冲突
      • 字节码验证: 这是最复杂的验证阶段,通过数据流和控制流分析,确定程序语义是合法的、符合逻辑的。例如:
        • 类型转换是否合法
        • 栈帧中的数据类型与指令操作的数据类型是否匹配
        • 方法调用是否合法
        • 字节码指令序列不会导致程序跳转到不期望的位置
      • 符号引用验证: 发生在解析阶段之前,验证符号引用中通过字符串描述的全限定名是否能够找到对应的类、字段、方法,以及访问性 (public, private 等) 是否正确。

    验证阶段: 验证阶段的核心是确保加载的类是安全的、合法的,防止恶意或错误的字节码破坏 JVM 的稳定性和安全性。如果验证失败,将会抛出 VerifyError 异常或其子类异常。

  • 2.2 准备 (Preparation)

    • 目的: 为类变量 (static 变量,不包括实例变量) 分配内存并设置类变量初始值。
    • 主要工作:
      • 在方法区中为类变量分配内存空间。
      • 将类变量初始化为默认初始值 (零值)。 例如,int 类型变量初始化为 0,boolean 类型变量初始化为 false,引用类型变量初始化为 null。
      • 注意: 这里 不 会执行类变量的显式初始化 (例如,static int a = 123; 中的 123) 和静态代码块的执行。这些会在 初始化 阶段完成。
      • final static 修饰的且在编译期可知的字段 (常量) 会在准备阶段被赋予代码中设定的初始值。 例如,static final int CONSTANT = 123;,在准备阶段 CONSTANT 就会被赋值为 123。

    准备阶段: 准备阶段主要为类变量分配内存并赋予默认初始值,为后续的初始化阶段做准备。

  • 2.3 解析 (Resolution)

    • 目的: 将常量池中的符号引用替换为直接引用。
    • 主要工作:
      • 符号引用: 符号引用是以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要能无歧义地定位到目标即可。例如,一个方法的全限定名、字段描述符等。
      • 直接引用: 直接引用是直接指向目标的指针、相对偏移量或能间接定位到目标的句柄。
      • 解析过程: 虚拟机将常量池中的符号引用替换为实际的内存地址或者句柄等直接引用,以便程序在运行时能够真正访问到引用的目标 (类、字段、方法等)。
      • 解析时机: 解析可以在类加载的 初始化阶段之前 或 之后 开始。
        • 静态解析 (Eager Resolution): 在类加载的解析阶段就完成解析。例如,invokestatic, invokespecial 等指令所使用的符号引用通常会在解析阶段进行解析。
        • 动态解析 (Lazy Resolution): 在程序 真正使用 到符号引用时才进行解析。例如,invokevirtual, invokeinterface, invokedynamic 等指令所使用的符号引用可能会延迟到实际运行时才解析 (动态链接)。

    解析阶段: 解析阶段将 Class 文件中用符号引用的类、接口、字段、方法等替换为直接引用,使得程序在运行时能够找到并使用这些资源。

3. 初始化 (Initialization)

  • 目的: 执行类构造器 <clinit>() 方法,完成类变量的显式初始化和静态代码块的执行。
  • 主要工作:
    • 执行类构造器 <clinit>() 方法。 <clinit>() 方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块 (static{}) 中的语句合并产生的。
    • <clinit>() 方法与实例构造器 <init>() 方法不同。 <clinit>() 是类构造器,负责类的初始化;<init>() 是实例构造器,负责对象的初始化。
    • <clinit>() 方法的执行特点:
      • JVM 会保证在子类的 <clinit>() 方法执行前,父类的 <clinit>() 方法已经执行完毕。 因此,第一个被执行 <clinit>() 方法的类一定是 java.lang.Object。
      • <clinit>() 方法对于类或接口来说不是必需的。 如果一个类没有静态变量赋值操作,也没有静态代码块,那么编译器可以不为这个类生成 <clinit>() 方法。
      • 接口中也可以有类变量初始化操作,但接口的 <clinit>() 方法与类的 <clinit>() 方法略有不同。 执行接口的 <clinit>() 方法不需要先执行父接口的 <clinit>() 方法。只有当父接口中定义的变量被使用时,父接口才会初始化。
      • JVM 会保证一个类的 <clinit>() 方法在多线程环境中被正确地加锁同步。 这意味着如果多个线程同时去初始化一个类,只会有一个线程执行该类的 <clinit>() 方法,其他线程会被阻塞等待,直到 <clinit>() 方法执行完毕。这保证了类的初始化过程是线程安全的。

初始化阶段: 初始化阶段是类加载过程的最后一步,也是真正开始执行类中定义的 Java 代码的阶段。它负责执行类构造器 <clinit>() 方法,完成类变量的显式初始化和静态代码块的执行,使类真正可以使用。

4. 使用 (Using)

  • 目的: 类被程序代码正常使用,例如创建类的实例,访问类的静态成员变量,调用类的静态方法等。
  • 主要工作: 这个阶段就是程序代码按照正常的逻辑使用已经加载、链接和初始化完成的类。

5. 卸载 (Unloading)

  • 目的: 当一个类不再被任何地方引用时,JVM 可能会在方法区中卸载该类。
  • 条件: 类卸载的条件非常苛刻,通常只有在以下情况才可能发生 (但实际应用中非常罕见,尤其是在 HotSpot VM 中):
    • 该类的所有实例都已经被回收。 (包括 java.lang.Class 对象本身)
    • 加载该类的类加载器已经被回收。
    • 该类对应的 java.lang.Class 对象没有任何地方被引用 (包括反射、JNI 等)。
  • 实际情况: 在 HotSpot VM 中,默认情况下,类卸载的条件非常苛刻,几乎不可能发生。只有在某些特定的场景下,例如使用自定义类加载器,并且程序主动进行类卸载操作时,才有可能卸载类。 在大多数情况下,类一旦被加载到 JVM 中,就会一直存在,直到 JVM 进程结束。

类加载阶段:

类加载是一个复杂而重要的过程,它保证了 Java 程序可以动态加载类,并确保了程序的安全性和正确性。 理解类加载机制对于深入理解 JVM 的运行原理和进行性能调优至关重要。

简要流程概括:

  1. 加载 (Loading): 找到字节码,读取到内存,创建 Class 对象。
  2. 链接 (Linking):
    • 验证 (Verification): 确保字节码合法安全。
    • 准备 (Preparation): 为类变量分配内存并赋默认初始值。
    • 解析 (Resolution): 将符号引用替换为直接引用。
  3. 初始化 (Initialization): 执行 <clinit>() 方法,完成类变量的显式初始化和静态代码块。
  4. 使用 (Using): 程序正常使用类。
  5. 卸载 (Unloading): (很少发生) 当类不再被引用时,可能被卸载。
JVM类加载器子系统各阶段作用 类加载器子系统各阶段作用 类加载器子系统负责从文件系统或者网络中加载Class文件,Class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于它是否运行,则由Execution Engine决定。 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 1 加载阶段 通过一个类的全限定类名获取定义此类的二进制字节流 将这个字节流所代表 阅读详情

相关推荐

深入理解JVM(11)——类加载(1)——类加载的5个阶段

目录 0.概述 1.类型的加载 1.1 加载阶段完成三件事 1.2 加载.class文件的方式 1.3 数组类和非数组类的加载阶段的不同 1.4 类的加载的最终结果 2.类型的连接 2.1 验证 (1)文件格式验证 (2)元数据的验证 (3)字节码验证 (4)符号引用验证 2.2 准备 2.3 解析 (1)类和接口的解析 (2)字段解析 (3)类方法解析 (4)...

波波鱼的博客 1159

类加载(基本说明、流程图、类加载各个阶段完成的任务)

总的来说,静态加载就是在编译的时候就会加载相关的类,它会检查你的类是否正确,各方面会去检测。而动态加载是执行到这一段的时候才会加载,如果运行的时候没有用到这个类,即使不存在也不会报错,这样就降低了一定的依赖性。......

while(true){ study } 1706

04.JVM的类加载机制(加载时机+加载阶段)

4.JVM的类加载机制 链接:https://pan.baidu.com/s/1-CWk1PayOwOst-_m8CIFCQ 提取码:489y 《配套视频讲解》 上一篇:03.Java代码的运行机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3

Open_Coder的博客 305

类加载的过程

1 加载 注意:“加载”是“类加载”(Class Loading)过程的第一步 1.1 加载的过程 在加载过程中,JVM主要做3件事情 通过一个类的全限定名来获取定义此类的二进制字节流(class文件) 在程序运行过程中,当要访问一个类时,若发现这个类尚未被加载,并满足类初始化的条件时,就根据要被初始化...

weixin_33936401的博客 271

如何利用GMS构建地下水数值模拟模型?

第一步:点图中三维网格的图标然后点Grid→Create Grid这个界面是用于创建一个有限差分网格的设置窗口。它允许你定义网格在三维空间中的范围、分辨率以及其他相关属性。这个界面提供了一个直观的方式来定义一个三维的有限差分网格,你需要指定每个维度上的范围、划分的单元格数量,以及一些控制单元格大小分布和网格方向的参数。这个网格通常会被用于数值模拟,例如地下水流模拟。在点击 "OK" 之前,请务必仔细检查所有参数是否符合你的建模需求。1. X-Dimension (X 轴维度)2. Y-Dimension (

weixin_44259522的博客 2093

GD32F303 Keil 工程项目从零搭建实战指南

本文是一份详细的GD32F303 Keil工程项目从零搭建实战指南。文章阐述了亲手搭建工程的重要性,并逐步指导开发者完成从环境准备、目录规划、工程创建、文件添加、关键配置到编译调试的全过程。重点讲解了如何正确选择启动文件、添加外设库、配置头文件路径和全局宏,旨在帮助开发者深入理解工程结构,掌握GD32F303开发的核心技能,实现从“会用”到“懂”的跨越。

weixin_29190651的博客 406

JVM进阶(十七)——类加载阶段解析:准备-解析-初始化

JVM进阶(十七)——准备-解析-初始化  在类加载机制的五个阶段中,我们已经讲完了第一个阶段。剩下的四个阶段由于涉及到比较多的类文件相关的知识,现在讲了会看得很吃力,所以我们暂时不会一一的去细讲,只说一下大概的用处,让大家有个概念性的认识。   装载之后的阶段就是校验阶段了,该阶段的目的就是确保上一阶段读进来的二进制字节流中包含的信息符合虚拟机的规范,并且不会危害虚拟机自身。校验主要分为四个方向

IT全栈 华强工作室 4万+

WinCC ActiveX控件“许可证缺失”故障排查:从注册表修复到系统兼容性全解析

本文深入解析WinCC ActiveX控件报错“未找到许可证信息”的根本原因与解决方案。核心在于系统注册表中控件的设计时许可证密钥丢失或损坏。文章提供了从手动修复注册表、排查64位系统兼容性,到预防性环境部署的全流程专业指南,帮助工程师彻底解决这一常见故障。

oil88的博客 646

JVM :java虚拟机简要概述

JVM :java虚拟机 概述 ​ 虚拟机:所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执 行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。它专门为 执行某个单个计算机程序而设计。在 java 虚拟机中执行的指令我们称为 java 字节码指令。 Java 技术的核心就是 java 虚拟机,因为所有的 java 程序都运行在 java 虚拟机内部。 JVM作用: Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对

weixin_52850590的博客 414

解决VMware与Hyper-V/Device Guard冲突的实用指南

本文详细解析了VMware与Hyper-V/Device Guard冲突的根源,并提供了三种实用的解决方案:彻底关闭相关功能、通过启动配置实现选择性引导,以及使用VMware Workstation Pro的Hyper-V兼容模式。指南包含清晰的诊断步骤、操作命令和避坑建议,帮助用户根据自身需求灵活选择,实现虚拟化环境的稳定运行或高效共存。

weixin_29306317的博客 684

阻抗匹配与史密斯(Smith)圆图

在找到点B和B'后,我们就能够测量A'到B和B'到D的弧长,前者就是C的归一化电纳值,后者为L的归一化电抗值。当然,表面上看新的点好像是一个不同的阻抗,实际上Z和1/Y表示的是同一个元件(这个新值在圆图上呈现为一个不同的点,而且反射系数也不相同,依次类推)。出现这种情况的原因是我们的图形本身是一个阻抗图,而新的点代表的是一个导纳。这个方程是在复平面(Γr, Γi)上、圆的参数方程(x - a)² + (y - b)² = R²,它以[r/(r + 1), 0]为圆心,半径为1/(1 + r)。

qq_55759599的博客 3962

JVM 链接阶段之 Preparation——准备

一 点睛 准备阶段(Preparation),简言之,为类的静态变量分配内存,并将其初始化为默认值。 当一个类验证通过时,虚拟机就会进入准备阶段。在这个阶段,虚拟机就会为这个类分配相应的内存空间,并设置默认初始值。Java 虚拟机为各类型变量默认的初始值如表所示。 类型 默认初始值 byte (byte)0 short (short)0 int 0

实践求真知 742

嵌入式主板系统配置实战:OTG切换、双网共存与开机自启详解

在嵌入式Linux系统开发中,系统配置是连接硬件平台与应用功能的关键桥梁。其核心原理在于通过内核参数、文件系统接口和系统服务等机制,实现对硬件资源和系统行为的精细控制。掌握这些配置技术,对于提升开发效率、保障系统稳定性和实现产品差异化至关重要。无论是工业物联网网关、智能终端还是边缘计算设备,都需要对网络、USB、启动项等基础功能进行可靠配置。本文聚焦于嵌入式主板开发中的高频需求,例如OTG功能模式切换、双网共存路由策略以及基于systemd的开机自启动实现,通过具体的命令和脚本示例,为开发者提供一套可直接复

weixin_30827827的博客 321

【JVM】JVM07(类加载阶段详细解析)

类加载阶段详细解析,值得收藏

wenwenaier的博客 2278

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1451

【智能模型系列】基于Unity和MediaPipe【手部追踪+手势识别】系统开发指南

在本文中,我将详细介绍一个基于MediaPipe的Unity手势识别系统,该系统能够识别多种常见手势(如拳头、点赞、胜利手势等),并提供完整的事件系统来处理手势状态变化。这个系统非常适合用于VR/AR交互、手势控制游戏或任何需要自然用户界面的应用场景。

纯技术流日常开发商业开发记录总结等 583

详解JVM类加载的三个阶段

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这一过程就是虚拟机类加载机制。 java需要使用一个类时,并不是一蹴而就的,需要在后台进行一些必须的步骤。如下图所示,类在我们使用前,共经历了“加载”、“链接”和“初始化”三个阶段,而第二个阶段“链接”又被分为三个小阶段,分别是 “验证”、“准备”和“解析”。下文中我...

Jiangkang1997的博客 1344

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JVM的类加载阶段

JVM的类加载阶段 如图所示:JVM的类加载阶段分为5个阶段,加载,验证,准备,解析,初始化。初始化完成后就能够使用该类,同时在该类不再被需要时,可以从JVM中卸载它。 每个阶段的作用 加载:简单的说就是JVM读取Class文件,并且根据Class文件信息创建java.lang.Class对象。 验证:这个阶段主要是验证Class文件的字节流是否符合虚拟机的要求规范,从而保障虚拟机的安全...

硅脂味咖啡的博客 630

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JVM类加载三阶段详解

Java虚拟机(JVM)的类加载机制是Java语言实现"一次编写,到处运行"特性的核心基础。该机制通过将类的字节码文件动态加载到内存,并转换为可执行的Java类型,支撑了Java程序的动态性和灵活性。通过掌握各个阶段的特点和类加载器的工作原理,开发者能够更好地应对复杂的系统设计和运行时问题。三个阶段,其中链接阶段又可细分为验证、准备和解析三个子阶段。JVM通过类加载器(ClassLoader)实现类的加载,采用双亲委派模型确保类的唯一性和安全性。初始化阶段是类加载的最后一步,执行类构造器。

weixin_37838725的博客 565

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【JVM】类加载阶段&类加载器

本文介绍了JVM类加载机制与运行优化。类加载分为加载、链接和初始化三个阶段:加载阶段将字节码载入方法区;链接阶段包括验证、准备和解析;初始化阶段执行类构造方法,采用懒加载策略。类加载器采用双亲委派模型,分为启动类、扩展类和应用类加载器,JDBC等场景通过线程上下文类加载器打破该机制。JVM采用分层编译优化,包括解释执行、C1编译和C2编译等5个层次,通过即时编译器将热点代码编译为机器码提升性能。文章还分析了单例模式的线程安全实现和类加载缓存机制。

qq_41725967的博客 905

Java类加载机制的几个个阶段,加载、验证、准备、解析、初始化【jvm】

类加载阶段 1、加载 概述: 一个Java文件从编码完成到最终执行,一般主要包括两个过程:编译和运行,其中编译就是把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件,然后运行则是把编译声称的.class文件交给Java虚拟机(JVM)执行。而我们所说的类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。 简单来说:加载指的是把class字节码文件从各个来源通过类加载器装载入内存中。 举个通俗点的????: JVM

qq_46489085的博客 4255

深入gh_mirrors/jvm9/jvm:类加载的五个阶段全解析

你是否曾在开发中遇到过神秘的`ClassNotFoundException`?是否对JVM如何将.class文件转化为可执行代码感到困惑?类加载机制作为JVM的核心底层技术,是解决这些问题的关键。本文将带你全面掌握类加载的五个阶段——加载、验证、准备、解析和初始化,通过流程图解、代码示例和实战分析,让你彻底理解JVM如何将字节码转化为运行时对象,轻松应对类加载相关异常。 ## 类加载全景图:五个...

gitblog_00458的博客 900

从“类加载的五个阶段”逐步分析 JVM“ 在每个阶段的内存变化”

本文分析了JVM在类加载五个阶段的内存变化过程。以HotSpot+Java17为例,重点阐述了:1)加载阶段在Metaspace存储类结构信息;2)准备阶段为静态变量分配默认值;3)初始化阶段执行静态代码块并可能导致堆内存分配。关键结论是:类元信息和静态变量存放在Metaspace,实例对象在Heap,执行方法使用栈空间。类加载过程中Metaspace持续增长,初始化阶段可能触发Heap分配,类卸载后Metaspace资源可被GC回收。

码码哈哈的博客 568

JVM(五)——类加载阶段

在自定义类加载器时,使用不同的类加载器对象获取的类不是相同的。Class<?Class<?// 都是 classLoader1 对象// trueClass<?// 创建了 classLoader2// false。

924

JVM类加载子系统的流程(加载阶段、链接阶段和初始化阶段)

一、类加载子系统的作用 1.类加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 2.ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine(执行引擎)决定。 3.加载的类信息存放在一块成为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 举例:类加载.........

a2321123的博客 690

【JVM类加载及字节码技术】类加载阶段——加载、链接(一)

JVM的类加载——加载、链接【一】

太阳的博客 727
上一篇: Nacos Config Service 和 Naming Service 各自的核心功能是什么?
下一篇: Spring BeanFactoryPostProcessor 和 BeanPostProcessor是如何影响 Bean 的创建和初始化过程的?
冰糖心书房
博客等级 码龄15年 6014粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值