深入Java虚拟机之类加载

鸿蒙开发之hdc命令行 hdc(HarmonyOS Device Connector)是HarmonyOS为开发人员提供的用于调试的命令行工具,通过该工具可以在windows/linux/mac系统上与真实设备进行交互。 阅读详情

深入Java虚拟机_ClassLoader

类加载器深入剖析

  • Java虚拟机与程序的生命周期

  • 在如下几种情况下,Java虚拟机将结束生命周期

    • 执行了System.exit()方法
    • 程序正常执行结束
    • 程序在执行过程中遇到了异常或错误而异常终止
    • 由于操作系统出现错误而导致Java虚拟机进程

类的加载连接和初始化

  • 加载:查找并加载类的二进制数据

  • 连接

    • 验证:确保被加载的类的正确性
    • 准备:为类的静态变量分配内存,并将其初始化为默认值
  • 解析:把类中的符号引用转换为直接引用

  • 初始化:为类的静态变量赋予正确的初始值

  • Java程序对类的使用方式可分为两种

    • 主动使用
    • 被动使用
  • 所有的Java虚拟机实现必须在每个类或接 口被Java程序“首次主动使用”时才初始化他们

  • 主动使用(六种)

    • 创建类的实例
    • 访问某个类或接口的静态变量,或者对该静态 变量赋值
    • 调用类的静态方法
    • 反射(如 Class.forName(“com.shengsiyuan.Test”) )
    • 初始化一个类的子类
    • Java虚拟机启动时被标明为启动类的类(Java Test)
  • 除了以上六种情况,其他使用Java类的方 式都被看作是对类的被动使用,都不会导 致类的初始化

类的加载

  • 类的加载指的是将类的.class文件中的二进 制数据读入到内存中,将其放在运行时数 据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法 区内的数据结构

  • 加载.class文件的方式

    • 从本地系统中直接加载
    • 通过网络下载.class文件
    • 从zip,jar等归档文件中加载.class文件
    • 从专有数据库中提取.class文件
    • 将Java源文件动态编译为.class文件

  • 类的加载的最终产品是位于堆区中的Class对象

  • Class对象封装了类在方法区内的数据结构 ,并且向Java程序员提供了访问方法区内 的数据结构的接口

  • 有两种类型的类加载器

    • Java虚拟机自带的加载器
      • 根类加载器(Bootstrap)
      • 扩展类加载器(Extension)
      • 系统类加载器(System)
  • 用户自定义的类加载器

    • java.lang.ClassLoader的子类
    • 用户可以定制类的加载方式
  • 类加载器并不需要等到某个类被“首次主 动使用”时再加载它

  • JVM规范允许类加载器在预料某个类将要 被使用时就预先加载它,如果在预先加载 的过程中遇到了.class文件缺失或存在错误 ,类加载器必须在程序首次主动使用该类 时才报告错误(LinkageError错误)

  • 如果这个类一直没有被程序主动使用,那 么类加载器就不会报告错误

类的验证

  • 类被加载后,就进入连接阶段。连接就是 将已经读入到内存的类的二进制数据合并 到虚拟机的运行时环境中去。

  • 类的验证的内容

    • 类文件的结构检查
    • 语义检查
    • 字节码验证
    • 二进制兼容性的验证

类的准备

类的解析

类的初始化

  • 类的初始化步骤

类的初始化时机

  • 主动使用(六种)

    • 创建类的实例
    • 访问某个类或接口的静态变量,或者对该静态 变量赋值
    • 调用类的静态方法
    • 反射(如 Class.forName(“com.shengsiyuan.Test”) )
    • 初始化一个类的子类
    • Java虚拟机启动时被标明为启动类的类(Java Test)
  • 除了上述六种情形,其他使用Java

类的方 式都被看作是被动使用,不会导致类的初始化

  • 只有当程序访问的静态变量或静态方法确 实在当前类或当前接口中定义时,才可以 认为是对类或接口的主动使用

  • 调用ClassLoader类的loadClass方法加载 一个类,并不是对类的主动使用,不会导 致类的初始化。

类加载器

类加载的父委托机制


命名空间


个类

运行时包

创建用户自定义的类加载器

不同类加载器的命名空间关系

  • 修改MyClassLoader类的源代码

类的卸载

013:无人机航线规划的概念 航线规划是无人机任务规划的核心环节,它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素,包括飞行时间、飞行距离、能源消耗、飞行安全等。 阅读详情

相关推荐

Windows10下部署Heygem进行数字人生成

对于使用Heygem生成数字人,需要注意几个问题: + 需要使用Nvidia的显卡。 + 需要在Windows上进行本地部署。主要原因为客户端是Windows的,客户端对上传的视频写入硬编码的`D:\heygem_data\voice\data`目录,需要在容器上读取这些文件。 + 需要在Windows上部署Docker,将Windows的目录映射到容器中,由容器中的服务进行读取。 + 需要特别注意,一定要有D盘,这个D盘是Windows的D盘,不能是插入的USB设备后产生的D盘。 + 需要下载3个Doc

冀辉的博客 5619

Java虚拟机类加载机制

Java虚拟机类加载机制详解 摘要:Java虚拟机通过类加载机制将Class文件加载到内存,经历加载、验证、准备、解析和初始化五个阶段。这种动态加载特性为Java程序提供了灵活性,支持动态扩展和接口实现延迟绑定。初始化阶段存在五种必须触发的场景,而被动引用不会引发初始化。类加载器采用双亲委派模型(Bootstrap、Extension、Application三类加载器),确保类安全性和唯一性,但存在三次被破坏的情况:JDK1.2向前兼容、JNDI服务逆向调用和OSGi热部署需求。类加载器与类共同确定唯一性,

纯洁的小魔鬼 806

JVM-4——类的主动被动使用

类的使用 在JVM中表示两个class对象是否为同一个类存在两个必要条件: 类的完整类名必须一致,包括包名 加载这个类的ClassLoader(指ClassLoader实例对象)必须相同 换句话说,在JVM中,即使这两个类对象来源于同一个class文件,被同一个虚拟机所加载,但只要加载他们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。 对类加载器的引用 JVM必须知道一个类型是由启动加载器加载的还是由用户类加载器加载的。如果一个类型是由用户类加载器加载的,那么JVM会将这个类加

phg739436146的博客 440

Word | 简单可操作的快捷公式编号、右对齐和引用方法

在理工科论文的写作中,涉及到大量的公式输入,我们希望能够按照章节为公式进行编号,并且实现公式居中,编号右对齐的效果。网上有各种各样的方法来实现,操作繁琐和简单的混在一起,让没有接触过公式编号的人感觉比较混乱。笔者自己博览相关博客,亲身实践,总结出一套自认为比较简便的公式编号、对齐和引用方法,在这里分享给大家~

qq_43466146的博客 3万+

LangChain学习及应用(超详细)

Model I/O 部分是与语言模型进行交互的核心组件,包括输入提示(Prompt Template)、调用模型(Model)、输出解析(Output Parser)。简单来说,就是输入、处理、输出这三个步骤。LLM 因其具有海量参数,需要花费相当的物力与时间成本进行预训练和微调,同时商用 LLM 还需要进行各种安全测试与风险评估等。因此 LLM 会存在知识滞后的问题。在专有领域,LLM 无法学习到所有的专业知识细节,因此在面向专业领域知识的提问时,无法给出可靠准确的回答。

weixin_39764056的博客 4257

JVM基础-Java类加载机制

JVM

hy_47的专栏 675

历史预测+LLM双杀!DriveGPT4-V2闭环驾驶配置避坑指南

本文深入探讨了DriveGPT4-V2在工程化部署中的核心挑战与解决方案。通过融合历史轨迹预测与大语言模型,该模型旨在实现更可靠的端到端自动驾驶。文章详细解析了从环境配置、多模态Token对齐、轻量控制头设计到训练优化与闭环仿真验证的全流程,为开发者提供了一份详实的避坑指南。

transformer2023的博客 384

Java虚拟机

深入Java虚拟机_ClassLoader <非原创> 类加载器深入剖析 Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机将结束生命周期 执行了System.exit()方法 程序正常执行结束 程序在执行过程中遇到了异常或错误而异常终止 由于操作系统出现错误而导致Java虚拟机进程 类的加载连接和初始化 加载:查找并加载类的二进制数据 连接 验证:确保被加载的类的正确性...

sx_huangying的博客 224

静态随机存储器(SRAM)

静态随机存储器(SRAM)是一种广泛用于计算机系统和嵌入式设备中的高速随机访问存储器。与动态随机存储器(DRAM)不同,SRAM 不需要定期刷新,因此可以实现更快的访问时间和更低的功耗。SRAM通常用于缓存、高速缓冲器和存储器应用程序中,其中性能和可靠性至关重要。

JAZJD的博客 8148

④ Django创建用户中心应用users,扩展用户信息

本章配套视频教程 Django创建用户中心应用users,扩展用户数据 在settings.py文件中配置项目 1、语言配置:LANGUAGE_CODE = 'zh-hans’ 2、时区配置:TIME_ZONE = 'Asia\Shanghai’ 3、模板路径配置:‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)], 并创建templates文件

轻编程的博客 672

【深入理解Java虚拟机】类加载机制

本文内容来源于《深入理解Java虚拟机》一书,非常推荐大家去看一下这本书。本系列其他文章:【深入理解Java虚拟机】Java内存区域模型、对象创建过程、常见OOM【深入理解Java虚拟机】垃圾回收机制1、类加载机制概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在java中,类型的加载、连

开心阳 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java虚拟机之类加载过程

我们知道虚拟机中类加载的全过程包含:加载丶验证丶准备丶解析和初始化这5个阶段,那么我们来详细了解下这5个步骤分别做了什么! 在此阶段虚拟机完成的三件事情: (1)通过一个类的全限定名来获取定义的二进制字节流。 (2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 (3)在内存中生成一个代...

CongratulationTX的博客 246

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机控制技术及应用

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

004-Java虚拟机JVM之类加载

Java知识点总结系列目录 **1. **

jeff's blog 688

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java虚拟机(HotSpot)之类加载器

文章目录Jvm类加载器一、Jvm生命周期二,类加载1.类的加载过程2.四种验证方式3.类加载器的分类一,Bootstarap 加载器二,扩展类加载器 ExtClassLoader三,应用类加载器 AppClassloader四,自定义类加载器五,获取classloader的方式4.双亲委派机制5.类的主动使用和被动使用(重点)运行时数据区 Jvm类加载器 一、Jvm生命周期 虚拟机的启动: 虚拟机的启动是通过引导类加载器创建一个初始类来完成的,这个类是由虚拟机的具体实现指定的 虚拟机的执行:

weixin_43679491的博客 901

Java虚拟机之类加载机制

Java虚拟机之类加载机制 导语:在上一篇博客中我们对Java虚拟机的内存分配和回收进行了介绍和分析,本篇博客将主要针对Java虚拟机的类加载机制,包括类的生命周期、加载过程、类加载器以及双亲委派模型等做详细的介绍 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制;类是在运行期间第一次使用时动态...

Thinkao 的博客 212

Java虚拟机之类加载学习总结

Java 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形可以被虚拟机直接使用的 Java 类型,这个过程被称作虚拟机的类加载机制。实现自定义类加载器一般分为两步:一是继承;二是重写父类的方法。defineClass():将一个字节数组转换为 Class 类的实例;loadClass():根据全限定类名找到类,推荐自定义类加载器重写,而不是当前方法。实际上,即使我们按如上方法自定义了类加载器,也无法使用自定义类加载器。分析内部调用父类的无参构造函数。

程序猿周周的博客 818

Java虚拟机之类加载器

类加载机制是指虚拟机将描述类的数据从class文件加载到内存中,并进行数据验证、解析、初始化等过程,最终形成可以直接被虚拟机使用的java类型,java语言中类的加载、链接、初始化等过程并不是在编译时期完成,而是在运行时期进行的 好处在于为语言提供了动态扩展的特性,坏处在于增加了性能的开销; 一、类加载过程 类在jvm中的整个生命周期包括: 加载loading--->验证verifi...

wuyundong123的博客 247

java虚拟机之类加载器

类加载器实现了类加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”的这个动作~ 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在java虚拟机中的唯一性,通俗点说:只有两个类是同一个类加载器加载的前提下,才能比较两个类是否“相等”,否则两个类必定不相等! 举个栗子! public class ClassLoaderTest { public static voi...

CongratulationTX的博客 183

Java虚拟机之类的加载器及类的加载过程

JAVA基础:Java虚拟机之类的加载器及类的加载过程 文章目录JAVA基础:Java虚拟机之类的加载器及类的加载过程1.类加载器子系统作用:2. 类加载器ClassLoader2.1 类加载过程 loading ----> 链接(linking)--->初始化(Initialization):2.11 loading阶段2.12 链接阶段:2.13 初始化过程:2.2类加载器的分类:引导类加载器和自定义加载器2.21 引导类加载器(bootstraploader)2.22 扩展类加载器(Ext

qq_46096321的博客 712

java虚拟机jvm之类加载机制

java类的加载过程、java虚拟机、jvm、类型的加载、连接和初始化过程、hotspot虚拟机

qq_33014341的博客 348
上一篇: 深入理解Java类实例化时jvm执行顺序
下一篇: 2021JAVA面试题附答案(持续更新版)
给自己加加油
博客等级 码龄8年 302粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值