首页 > 其他分享 >JVM 实战 - JVM之类加载过程

JVM 实战 - JVM之类加载过程

时间:2024-03-16 11:04:22浏览次数:34  
标签:实战 初始化 变量 静态 JVM 方法 加载

在Java虚拟机(JVM)中,类加载过程是将编译后的.class文件或其它格式的类定义数据加载到JVM内存的方法区,并为这些类型创建运行时的Class对象实例的过程。这个过程确保了Java代码能够在JVM上被正确执行。类加载主要包括以下几个步骤:

  1. 加载(Loading)

    • 通过类的全限定名来查找和读取对应的二进制字节流(即.class文件)。
    • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
    • 在内存中生成一个代表该类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。
  2. 验证(Verification)

    • 确保被加载的类信息符合JVM规范,没有安全方面的问题,如非法的数据类型、不合法的操作指令等。
    • 检查类文件结构、元数据、字节码、符号引用是否正确无误。
  3. 准备(Preparation)

    • 为类的静态变量分配内存并初始化为默认值(对于非final static变量来说,这里的初始化仅仅是分配空间但不赋予具体值)。
    • 对于final static类型的变量,如果其值在编译时已知,则会在此阶段直接赋值。
  4. 解析(Resolution)

    • 将常量池中的符号引用替换为直接引用(比如方法区内的指针或者偏移量),使得能够快速定位到方法表、字段表及接口方法表等。
  5. 初始化(Initialization)

    • 如果类还没有被初始化过,那么执行类构造器<clinit>方法的过程。此方法由编译器自动收集类中所有静态变量的赋值动作和静态语句块合并产生的。
    • 初始化阶段是真正执行类中静态初始化器(static initializer blocks)和静态变量赋值操作的时候。
  6. 使用(Using)

    • 类被JVM实际使用,在堆上创建对象实例,调用类的方法等。
  7. 卸载(Unloading)

    • 当一个类不再被任何线程引用时,经过垃圾回收机制确认后,类加载器可以卸载这个类,释放它占用的方法区资源。

在类加载过程中,还有一个重要的概念是类加载器(ClassLoader),它负责加载类的具体工作,且遵循特定的委托加载机制(如双亲委派模型),确保类加载的统一性与安全性。

标签:实战,初始化,变量,静态,JVM,方法,加载
From: https://blog.csdn.net/qq_33240556/article/details/136615994

相关文章

  • 实战5-某政府采购网cookies反爬(进入前检查浏览器)
    目标网站aHR0cDovL3d3dy55bmdwLmNvbS8=1.呈现状态2.分析网站先复制请求链接的curl看看打印出的结果打印出的结果不正常,来看看请求头,里面有一个'$Cookie',转场到请求连接的cookies中看看,xincaigou这个值大概就是我们想要的往上看其他请求,找xincaigou从哪冒出来,在第二个链......
  • 人工智能入门之旅:从基础知识到实战应用(一)
    一、引言人工智能(ArtificialIntelligence,AI)是指利用计算机科学和技术模拟、延伸和扩展人类智能的理论、方法、技术和应用系统的学科。它的目标是使计算机系统具有类似于人类的智能,能够感知环境、学习、推理、规划、解决问题和交流。在当今社会中,人工智能具有极其重要的地......
  • Python实战:Python异常处理机制及try-except-finally
    本文将详细介绍Python中的异常处理机制,以及如何使用try-except-finally语句来处理程序中的错误和异常情况。我们将深入探讨异常的概念、类型和层次结构,并展示如何在实际编程中应用异常处理来提高代码的健壮性和可维护性。1.引言在编程过程中,错误和异常是不可避免的。异常......
  • Python实战:Python列表(List)详解及其常用方法
    本文将详细介绍Python中的列表(List)数据结构,包括其基本概念、特点、常用方法以及实际应用案例。我们将深入探讨列表的内部实现机制,并通过丰富的代码示例来展示如何高效地使用列表来解决各种编程问题。1.引言在Python中,列表(List)是最常用的数据结构之一,它提供了一种灵活......
  • [.NET项目实战] Elsa开源工作流组件应用(一): Elsa工作流简介
    Elsa工作流简介工作流是什么?引用维基百科中对工作流的解释:是对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算Elsa是一个功能强大的工作流库,支持在任......
  • YUNBEE云贝-PGCM v16大师认证实战培训课云贝专属奖学金,等你来拿!
    课程安排5天30课时,理论+实验相结合,贴近生产实战授课课程学习内容课时第一章介绍1.1PGCM课程介绍第1天/6课时第二章认证安全2.1认证安全(信任认证和口令认证)2.2密码复杂度2.3访问控制(数据库角色、ACL/权限管理、行级安全性)2.4安全审计(审计日志)第三章内存管......
  • AspNetCore8.0实战
    前言想变优秀的第N天。学习张老师的Blog.Core。1.创建Asp.NetCoreAPI1.1创建项目启用OpenAPI:sawgger不适用顶级语句:使用main函数使用控制器:controller1.2配置说明iisSettings:iis配置。http:kestrl启动配置。IISExpress:iis启动配置。2.仓储+服务创建以下公共类......
  • JVM工作原理与实战(四十三):JVM常见面试题目
    专栏导航JVM工作原理与实战RabbitMQ入门指南从零开始了解大数据目录专栏导航前言一、JVM常见面试题目1.什么是类加载器,有哪些常见的类加载器?2.什么是双亲委派机制,以及如何打破双亲委派机制?3.如何判断堆上的对象没有被引用?4.JVM中都有哪些引用类型?5.ThreadLoca......
  • JVM内存结构
    JavaVirtualMachine(JVM)的内存结构通常被划分为以下几个部分:程序计数器(ProgramCounterRegister):程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在多线程环境下,每个线程都有自己的程序计数器,它们是线程私有的,互不干扰。Java虚......
  • 【Web】浅聊Hessian反序列化之Resin的打法——远程类加载
    目录前言原理分析XString:触发恶意类toStringQName的设计理念?远程恶意类加载Context:ContinuationContextQName:恶意toString利用hash相等构造EXP前言精神状态有点糟糕,随便学一下吧首先明确一个朴素的认知:当Hessian反序列化Map类型的对象的时候,会自动调用其put方法,而......