请描述下 Java 中类的加载过程

简介: 调用 Java.exe 时, 需要把类给加载到 JVM 中,使用类加载器进行加载

调用 Java.exe 时, 需要把类给加载到 JVM 中,使用类加载器进行加载


编译到加载整体流程2105804-20230131101200058-1174514852.png

类加载过程


在硬盘上查找并通过 IO 读入字节码文件, 加载到 JVM 内存的方法区当中


?> 方法区中存放的哪些信息

  • 方法区中的内容: 类被加载到方法区中后主要包含, 运行时常量池、类型信息、字段信息、方法信息、类加载器的引用、对应 class 实例的引用等信息
  • 类加载器的引用: 类加载器属于是一个实例对象, 存放在堆中, 在方法区中指向类加载器的地址
  • class 实例的引用: 类加载器在加载类信息放到方法区中后,这些字节码信息加在一起, 有共同的特征和行为, 会创建一个对应的 Class 类型的实例对象存放到堆中


验证

  • 校验字节码文件的正确性
  • 编译的字节码, 有可能被修改, 在加载之前要验证字节码的正确性


准备

  • 给类的静态变量分配内存,并赋予默认值
  • 静态变量是在类加载的时候就被执行的


解析

  • 将符号引用替换为直接引用,该阶段会把一些静态方法替换为指向数据所存内存的指针或句柄等(直接引用),这个过程也称为是静态链接
  • 静态链接过程(类加载期间完成)
  • 动态链接是在程序运行期间完成的将符号引用替换为直接引用


初始化

  • 对类的静态变量初始化为指定的值,执行静态代码块

2105804-20230131102625273-1851307425.png

目录
相关文章
|
3月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
112 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
83 10
|
5月前
|
Java Linux Maven
java依赖冲突解决问题之容器加载依赖jar包如何解决
java依赖冲突解决问题之容器加载依赖jar包如何解决
|
2月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
69 6
|
4月前
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
306 1
|
5月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
5月前
|
SQL Java 数据库连接
java连接数据库加载驱动到java项目
该博客文章介绍了如何在Java项目中通过代码加载数据库驱动并连接SQL Server数据库,包括具体的加载驱动和建立数据库连接的步骤,以及如何将驱动包添加到Java项目的构建路径中。
|
5月前
|
Java
描述 Java 中的重载和重写
【8月更文挑战第22天】
24 0
|
5月前
|
Java 测试技术 Spring
Java SpringBoot 加载 yml 配置文件中字典项
Java SpringBoot 加载 yml 配置文件中字典项
54 0
|
6月前
|
存储 算法 Java
JAVA程序运行问题之Java类加载到JVM中加载类时,实际上加载的是什么如何解决
JAVA程序运行问题之Java类加载到JVM中加载类时,实际上加载的是什么如何解决