当前位置: 首页 > 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…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...