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

【jvm】类加载分几步

目录

          • 1. 加载(Loading)
          • 2. 链接(Linking)
            • 2.1 验证(Verification)
            • 2.2 准备(Preparation)
            • 2.3 解析(Resolution)
          • 3. 初始化(Initialization)
          • 4. 使用(Using)
          • 5. 卸载(Unloading)

1. 加载(Loading)
  • 1.加载是类加载过程的第一个阶段,由类加载器(ClassLoader)负责执行。
  • 2.通过类的全限定名获取定义此类的二进制字节流:这通常意味着从文件系统、网络或其他来源读取类的.class文件或其他格式的二进制表示。
  • 3.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构:在Java虚拟机(JVM)中,方法区用于存储已被虚拟机加载的类信息常量静态变量即时编译器编译后的代码等数据。
  • 4.在内存中生成一个代表这个类的java.lang.Class对象:这个对象作为方法区这个类的各种数据的访问入口,是程序在运行时访问类的元数据的主要方式。
  • 5. 这些步骤在逻辑上是按顺序进行的,但在实际执行过程中,某些步骤(如解析)可能会与初始化阶段交叉进行,以支持Java语言的动态绑定特性。
2. 链接(Linking)
  • 1.链接过程可以细分为验证(Verification)、准备(Preparation)和解析(Resolution)三个阶段。
2.1 验证(Verification)
  • 1.目的:确保加载的类文件信息符合JVM规范,不会危害虚拟机自身的安全。
  • 2.内容:包括文件格式验证、元数据验证、字节码验证和符号引用验证。这些验证确保了类文件的合法性、合理性和一致性。
2.2 准备(Preparation)
  • 1.任务:为类的静态变量(被static修饰的变量)分配内存设置初始值。这些初始值通常是数据类型默认的零值(如int为0,boolean为false等),而不是被显式赋的值。需要注意的是,如果static变量是final的,并且其基本类型或String类型的值在编译时就已经确定,那么这些值在准备阶段就会被赋上。
2.3 解析(Resolution)
  • 1.过程:将常量池内的符号引用替换为直接引用的过程。符号引用以一组符号来描述所引用的目标,而直接引用则是直接指向目标的指针、相对偏移量或者一个能间接定位到目标的句柄。
3. 初始化(Initialization)
  • 1.初始化阶段是类加载过程的最后一步,主要完成类的静态变量的初始化工作。
  • 2.静态变量的初始化是由类构造器()方法完成的,这个方法由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的。
  • 3.初始化阶段只会在类被主动使用时才会触发,如创建类的实例、访问某个类或接口的静态变量、调用类的静态方法等。
4. 使用(Using)
  • 1.使用阶段是指类被加载、链接和初始化后,通过Java程序中的new关键字创建类的实例,或者通过反射等方式调用类的静态方法、访问静态变量等操作。
  • 2.在这个阶段,类的功能被充分利用,程序执行了类定义中的代码。
5. 卸载(Unloading)
  • 1.卸载是类生命周期的最后一个阶段,也是JVM垃圾回收机制的一部分。
  • 2.当类不再被JVM中的任何对象所引用,即类的所有实例都已被回收,并且加载该类的ClassLoader也已经被回收时,该类就可能被卸载。
  • 3.卸载过程包括释放类在方法区占用的内存空间,以及相关的其他资源。
  • 4.需要注意的是,类卸载并不是强制的,而是由JVM的垃圾回收器来决定的。

相关文章:

【jvm】类加载分几步

目录 1. 加载(Loading)2. 链接(Linking)2.1 验证(Verification)2.2 准备(Preparation)2.3 解析(Resolution) 3. 初始化(Initialization&#xff0…...

使用Apache http client发送json数据(demo)

POM依赖 &#xff1a; <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.12</version></dependency><dependency><groupId>com.alibaba</groupId&g…...

读零信任网络:在不可信网络中构建安全系统07设备信任

1. 设备信任 1.1. 在零信任网络中建立设备信任至关重要&#xff0c;这也是非常困难的一个环节 1.2. 建立设备信任是基石&#xff0c;直接影响零信任网络架构的成败 1.3. 大多数网络安全事件都和攻击者获得信任设备的控制权相关&#xff0c;这种情况一旦发生&#xff0c;信任…...

【Java算法专场】前缀和(下)

目录 和为 K 的子数组 算法分析 算法步骤 算法代码 算法示例 和可被 K 整除的子数组 算法分析 同余定理 负数取余 算法步骤 算法代码 算法示例 连续数组 算法分析 算法步骤 算法代码 算法示例 矩阵区域和 算法分析 算法步骤 算法代码 算法示例 算法分析 …...

音视频相关文章总目录

为了方便各位观看&#xff0c;本文置顶&#xff0c;以目录形式汇集我写过的大部分音视频专题文章。之后文章更新&#xff0c;本目录也会同步更新。写得不好和零零散散的文章就不放在这里了&#x1f605; &#xff1a; 音视频入门基础&#xff1a;像素格式专题系列文章&#x…...

7月31日MySQL学习笔记

今日内容: mysql: 行列转换 数据类型 函数 触发器 存储过程 事务 索引(还没讲) 三范式 JDBC连接数据库的6个步骤 三握四挥 行列转换 第一步 新建要转换的列 select name, 1 as 语文, 1 as 数学, 1 as 英语 from t_score GROUP BY name 第二步 对每一列填入值…...

什么是容器查询?分享 1 段优质 CSS 代码片段!

本内容首发于工粽号&#xff1a;程序员大澈&#xff0c;每日分享一段优质代码片段&#xff0c;欢迎关注和投稿&#xff01; 大家好&#xff0c;我是大澈&#xff01; 本文约 700 字&#xff0c;整篇阅读约需 1 分钟。 今天分享一段优质 CSS 代码片段&#xff0c;使用容器查询…...

【linux深入剖析】初识线程---线程概念

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. Linux线程概念什么是线…...

【MySQL】索引——索引的引入、认识磁盘、磁盘的组成、扇区、磁盘访问、磁盘和MySQL交互、索引的概念

文章目录 MySQL1. 索引的引入2. 认识磁盘2.1 磁盘的组成2.2 扇区2.3 磁盘访问 3. 磁盘和MySQL交互4. 索引的概念4.1 索引测试4.2 Page4.3 单页和多页情况 MySQL 1. 索引的引入 海量表在进行普通查询的时候&#xff0c;效率会非常的慢&#xff0c;但是索引可以解决这个问题。 -…...

python部署flask项目

python部署flask项目 1. 准备服务器2. 设置服务器环境3. 创建虚拟环境并安装项目依赖4. 配置Gunicorn5. 配置Nginx6. 设置Supervisor&#xff08;可选&#xff09;7. 测试部署 将Flask项目部署到服务器的流程大致如下&#xff1a; 1. 准备服务器 首先&#xff0c;需要准备一台…...

数据建模标准-基于事实建模

前情提要 数据模型定义 DAMA数据治理体系中将数据模型定义为一种文档形式&#xff0c;数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介&#xff1b; 作用 记录数据需求和建模过程中产生的数据定义&…...

量产部落SM2258XT开卡软件,SM2258XT主控128G SSD固态卡死修复

故障现象&#xff1a;连接此固态硬盘后电脑就会卡死&#xff0c;拔掉重新连接概率性显示盘符&#xff0c;显示了之后也不能正常操作&#xff0c;一点击打开&#xff0c;电脑就立马卡死。 解决过程&#xff1a;下载了很多款量产工具&#xff0c;都不能开卡成功&#xff0c;点击…...

《零散知识点 · 自定义 HandleMapping》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

谈谈我对微服务的理解2.0

文章目录 一、引出问题二、微服务2-1、微服务的技术2-2、微服务的目的 三、微服务的拆分四、不连表查询五、微服务的好处六、微服务的坏处七、应付当下 这篇文章原本叫《如何做到不连表查询》&#xff0c;因为我对这个事一直耿耿于怀。在上家公司我经常被连表折磨&#xff08;连…...

ECCV 2024前沿科技速递:GLARE-基于生成潜在特征的码本检索点亮低光世界,低光环境也能拍出明亮大片!

在计算机视觉与图像处理领域&#xff0c;低光照条件下的图像增强一直是一个极具挑战性的难题。暗淡的光线不仅限制了图像的细节表现&#xff0c;还常常引入噪声和失真&#xff0c;极大地影响了图像的质量和可用性。然而&#xff0c;随着ECCV 2024&#xff08;欧洲计算机视觉会议…...

前端低代码必备:FrontendBlocks 4.0版本重磅发布,助力Uniapp-X原生APP开发

项目介绍 本软件是一款强大的所见即所得前端页面设计器&#xff0c;是低代码开发领域的基础设施&#xff0c;生成的代码不依赖于任何框架&#xff0c;实测可以将前端布局工作的耗时减少80%以上&#xff0c;最关键的是&#xff0c;它实现了人人都可以写前端页面的梦想。 不用写…...

如何将PyCharm 中使用 PDM 管理的 Django 项目迁移到 VS Code 并确保一切正常工作?

嗨&#xff0c;我是兰若姐姐&#xff0c;相信很多小伙伴都遇到过这种情况&#xff0c;使用pycharm用习惯了&#xff0c;想换个编辑器&#xff0c;比如换成vscode&#xff0c;今天就告诉大家&#xff0c;如果轻松切换到vscode 步骤 1&#xff1a;在 VS Code 中打开项目 打开 V…...

认识Android Handler

“Android Handler” 通常指的是 Android 开发中的 Handler 类&#xff0c;它是 Android SDK 的一部分&#xff0c;用于管理消息队列和线程之间的通信。它在 Android 开发中非常有用&#xff0c;特别是在计划消息和可运行对象&#xff08;Runnables&#xff09;在未来某个时间点…...

如何在 Ubuntu VPS 上安装 Cassandra 并运行单节点集群

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Cassandra&#xff0c;或者说 Apache Cassandra&#xff0c;是一个高度可扩展的开源数据库系统&#xff0c;在多节点设置上能够实…...

Golang | Leetcode Golang题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; func removeDuplicateLetters(s string) string {left : [26]int{}for _, ch : range s {left[ch-a]}stack : []byte{}inStack : [26]bool{}for i : range s {ch : s[i]if !inStack[ch-a] {for len(stack) > 0 && ch < stack…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...