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

Java # 类加载子系统

一、概述 

1、 类加载器子系统负责从文件系统或者网络中加载.Class文件

2、classloader只负责类的加载,至于他是否能够运行由执行引擎来决定

3、加载的类的信息会存放在方法区(元空间)中

二、加载过程

​​​​​​​

1、加载阶段

        1、通过一个类的全限定名来获得该类的二进制字节流

        2、将该字节流所代表的静态存储结构转化为方法区的运行时数据结构

        3、在内存中生成一个java.lang.Class对象,作为方法区对这个类的各种数据的访问入口

2、链接阶段 

  1. 验证:验证字节码文件是否合法:
    1. 文件格式验证
    2. 元数据验证
    3. 字节码验证
    4. 符号引用验证
  2. 准备:
    1. 为类变量分配内存并进行初始化,此时初始化的为零值
    2. 对于final修饰的类变量,在编译阶段就已经完成了内存的分配,此时会对该变量进行初始化
    3. 这里并不会为实例变量进行初始化,类变量会分配在方法区中,而实例变量会随着对象一起分配到堆中
  3. 解析:将常量池中符号引用转换为直接引用

3、初始化阶段

  • 此阶段会按顺序收集静态变量与静态代码块中的内容到<clinit>()方法中进行类变量的初始化
  • 若该类有父类,会保证该类父类的<clinit>()先执行
  • 虚拟机必须保证一个类的<clinit>()方法在多线程下被同步加锁

三、类加载器

  • 引导类加载器(Bootstrap_ClassLoader)
    • 由C/C++编写,并嵌入在JVM中
    • 该类没有父类加载器
    • 该类用于加载java的核心类库
  • 扩展类加载器(Extension_ClassLoader)
    • 该类派生于ClassLoader(是一个抽象类)
    • 该类用于加载java.ext.dirs系统属性所指定的目录中加载类库,或者从JDK的安装目录的jre/lib/ext子目录下加载类库
  • 系统类加载器(APPClassLoader)
    • 派生于ClassLoader
    • 该类用于加载用户自定义类
  • 自定义类加载器

四、其他

一、如何判断两个class对象是否相同

  • 类的完整类名必须一致,包括包名
  • 加载这个类的类加载器必须相同

二、对类加载器的引用

(1)JVM必须知道一个类是由启动类加载器加载的,还是由用户类加载器加载的。

(2)如果一个类型是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中。

(3)类的主动、被动使用(是否会导致类加载中的初始化操作)

  • 主动使用会导致类的初始化
    • 创建类的实例
    • 访问某个类或接口的静态变量,或者对该静态变量赋值
    • 调用类的静态方法
    • 反射(如:class.forName("com.xh.Test"))
    • 初始化一个类的子类
    • JVM启动时被标明为子类的类
    • JDK7开始提供的动态语言支持:java.lang.invoke.MethodHandle实力的解析结果REF_getStatic、REF_putStatic、REF_invokeStatic句柄对应的类没有初始化,则初始化
  • 除了上面的7种情况,其他使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化。

五、双亲委派机制

一、过程

        当类加载器接受到一个类加载请求时,并不会直接对该类进行加载,而是会将该请求委派给上一级的加载器。

        向上逐层委派到引导类加载器后,由引导类加载器判断自己是否有权限加载该类,有则加载后直接返回,没有则交付给下一层扩展类加载器,扩展类加载器查看自己是否有权限加载该类,有则直接加载后返回,没有则向下继续交付给系统类加载器处理

二、优点

1、保证每个类只被加载一次

2、保护java的核心代码

相关文章:

Java # 类加载子系统

一、概述 1、 类加载器子系统负责从文件系统或者网络中加载.Class文件 2、classloader只负责类的加载&#xff0c;至于他是否能够运行由执行引擎来决定 3、加载的类的信息会存放在方法区&#xff08;元空间&#xff09;中 二、加载过程 ​​​​​​​ 1、加载阶段 1、通…...

YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2...

安卓中常见的字节码指令介绍

问题背景 安卓开发过程中&#xff0c;经常要通过看一些java代码对应的字节码&#xff0c;来了解java代码编译后的运行机制&#xff0c;本文将通过一个简单的demo介绍一些基本的字节码指令。 问题分析 比如以下代码&#xff1a; public class test {public static void main…...

TCP的三次握手和四次挥手

文章目录 三次握手四次挥手TIME_WAITCLOSE_WAIT 使用wireshark观察 三次握手 握手的最终目的是主机之间建立连接 首先要有两个预备知识点 三次握手建立连接不一定会成功&#xff0c;其中最担心的就是最后一次握手失败&#xff0c;不过会有配套的解决方案建立好连接后是需要被…...

前后端分离------后端创建笔记(08)表单提交

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…...

途乐证券-KDJ分别代表什么?

KDJ是一种技能剖析东西&#xff0c;常见于股票、期货等商场中&#xff0c;它的全称是随机目标&#xff08;KDJ&#xff09;。KDJ目标包括三条线&#xff0c;分别为K线、D线和J线。那么&#xff0c;KDJ分别代表什么呢&#xff1f;本文将从多个视点进行剖析。 1. KDJ的简单介绍 …...

用C语言重写的原始Matlab OpenShoe算法:深入理解和实现步态分析的关键技术

一、引言 在许多领域&#xff0c;如医疗健康、体育科学、虚拟现实和机器人技术中&#xff0c;步态分析都是一个重要的研究领域。步态分析可以帮助我们理解人体运动的机制&#xff0c;评估疾病的影响&#xff0c;优化运动员的表现&#xff0c;甚至设计更自然的机器人运动。Open…...

什么开放式耳机音质好?值得推荐的开放式耳机分享

与封闭式耳机相比&#xff0c;开放式耳机具有更为自然、真实的音质&#xff0c;能够更好地还原音乐现场的声音环境。以下是几款值得推荐的开放式耳机&#xff0c;都来看看有哪些吧。 推荐一&#xff1a;NANK南卡00压开放式耳机 点评&#xff1a;体验最好的开放式耳机没有之一…...

mac harbor的安装

harbor的安装 为什么要整这个呢&#xff0c;因为我在学习k8s&#xff0c;但是需要一个自己的镜像仓库。于是&#xff0c;最开始想到的就是在本地直接部署一个&#xff0c;还比较安全、快速。 直接下载了官方的项目&#xff0c;运行脚本发现出了异常&#xff0c;这种异常我已经…...

SetActive和Enable有什么不同?

介绍 在Unity中&#xff0c;SetActive和Enable都是常用的方法&#xff0c;用于在运行时控制对象的可见性和功能开启状态。尽管它们的目的相似&#xff0c;但在使用时有一些区别。 SetActive SetActive是GameObject类的方法&#xff0c;用于启用或禁用游戏对象及其所有子对象…...

【Vue-Router】重定向

First.vue <template><h1>First Seciton</h1> </template>Second.vue&#xff0c;Third.vue代码同理 UserSettings.vue <template><h1>UserSettings</h1><router-link to"/settings/children1">children1</ro…...

vulnhub靶场之ADROIT: 1.0.1

准备&#xff1a; 攻击机&#xff1a;虚拟机kali、本机win10。 靶机&#xff1a;Adroit: 1.0.1&#xff0c;下载地址&#xff1a;https://download.vulnhub.com/adroit/Adroit-v1.0.1.ova&#xff0c;下载后直接vbox打开即可。 知识点&#xff1a;shell反弹&#xff08;jar&…...

【非欧几里得域信号的信号处理】使用经典信号处理和图信号处理在一维和二维欧几里得域信号上应用低通滤波器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【深入理解ES6】字符串和正则表达式

概念 字符串&#xff08;String&#xff09;是JavaScript6大原始数据类型。其他几个分别是Boolean、Null、Undefined、Number、Symbol&#xff08;es6新增&#xff09;。 更好的Unicode支持 1. UTF-16码位 字符串里的字符有两种&#xff1a; 前 个码位均以16位的编码单元…...

易服客工作室:Pixwell主题 – 现代杂志/WordPress新闻主题

PixWell主题概述 Pixwell主题是一个强大、多用途和现代的WordPress杂志主题&#xff0c;具有像素完美的设计、出色的功能、完全响应和移动友好。它非常灵活&#xff0c;非常适合食谱、时尚、旅行、技术、个人或任何其他很棒的杂志和博客网站。 该主题与 Elementor、Cooked&am…...

iOS手机无法安装Charles 的ssl证书

问题描述 iOS客户端安装证书时一直卡在下载这一步&#xff0c;无法抓包 1、打开Charles&#xff0c;选择help→SSL Proxying→Install Charles Root Certificate on a Mobile Device or Remote Browser 2、按照步骤1中的提示进行操作&#xff0c;手机连接电脑代理&#xff0c;…...

Promise处理异步操作

Promise是一种在JavaScript中处理异步操作的技术。Promise对象表示一个尚未完成的异步操作&#xff0c;它可以在将来的某个时候产生结果。Promise对象的状态可以是未完成、已完成或已拒绝。当Promise对象处于未完成状态时&#xff0c;我们可以附加一个或多个处理程序&#xff0…...

jpa查询返回自定义对象、返回指定VO、POJO

jpa查询返回自定义对象、返回指定VO、POJO jpa查询返回自定义对象、返回指定VO、POJO&#xff0c;JPA查询前会做大量处理&#xff0c;还有线程通知的操作。若并发大&#xff0c;处理性能直线下降。但是jpa就因为做了大量处理&#xff0c;对多数据库兼容极好&#xff0c;操作方…...

抖音小程序开发,收银台支付回调通知

大家好&#xff0c;我是小悟 关于抖音小程序收银台支付&#xff0c;可阅读【抖音小程序开发&#xff0c;唤起收银台&#xff0c;包括抖音支付、支付宝支付、微信支付】。 做支付功能最重要的一步就是异步回调通知&#xff0c;所谓回调通知就是唤起收银台支付&#xff0c;支付…...

selenium 爬虫

selenium 可以动态爬取网页数据&#xff0c;就像真实用户操作浏览器一样&#xff0c;从终端用户的角度测试应用程序&#xff0c;WebDriver通过原生浏览器支持或者浏览器扩展直接控制浏览器 webdriver下载 因为selenuim对浏览器的版本存在兼容问题&#xff0c;顾需要针对指定浏…...

星思半导体系统级通信测试实验室设备齐全,为卫星通信芯片验证提供坚实保障

随着政府工作报告首次为卫星互联网“定调”&#xff0c;资本市场的聚光灯迅速转向这条黄金赛道。业内观察指出&#xff0c;2026年的市场关注点更加务实&#xff0c;聚焦于真正具备核心技术、能参与国际竞争的上游“硬科技”企业。在政策与资本的同频共振下&#xff0c;以星思半…...

【农用无人机】dijkstra算法无人机农田农药喷洒路径规划【含Matlab源码 15284期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab领域博客之家&#x1f49e;&…...

Graphormer与YOLOv5跨界应用:从分子结构到材料缺陷的视觉识别

Graphormer与YOLOv5跨界应用&#xff1a;从分子结构到材料缺陷的视觉识别 1. 当图神经网络遇上目标检测 你可能很难想象&#xff0c;一个原本用于分析分子结构的AI模型&#xff0c;和一个专门检测图像中物体的算法&#xff0c;能擦出怎样的火花。这就是我们今天要展示的Graph…...

【MicroPython编程-ESP32篇:设备驱动】-PCF8591数据采集驱动

PCF8591数据采集驱动 文章目录 PCF8591数据采集驱动 1、PCF8591介绍 2、软件准备 3、硬件准备与接线 4、程序实现 4.1 PCF8591驱动实现 4.2 主程序 1、PCF8591介绍 PCF8591 是一款单片集成、独立电源、低功耗、8 位 CMOS 数据采集设备。 PCF8591 具有四个模拟输入、一个模拟输…...

文档格式高效破解:NCMDump实现加密文件自由掌控全指南

文档格式高效破解&#xff1a;NCMDump实现加密文件自由掌控全指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 在数字化办公时代&#xff0c;你是否曾因收到的加密文档无法跨平台打开而错失重要信息&#xff1f;是否经历过花费数…...

春联生成模型-中文-base环境隔离部署:Anaconda虚拟环境配置指南

春联生成模型-中文-base环境隔离部署&#xff1a;Anaconda虚拟环境配置指南 每次想尝试一个新的AI模型&#xff0c;最头疼的可能不是模型本身&#xff0c;而是环境配置。装了这个包&#xff0c;发现和之前项目的包版本冲突&#xff1b;好不容易跑起来&#xff0c;结果报了一堆…...

AI头像生成器效果展示:支持‘敦煌飞天纹样+半透明纱衣+暖光侧逆光’复杂提示

AI头像生成器效果展示&#xff1a;支持敦煌飞天纹样半透明纱衣暖光侧逆光复杂提示 当传统艺术遇见AI技术&#xff0c;会碰撞出怎样的视觉奇迹&#xff1f; 1. 惊艳开场&#xff1a;从想象到现实的艺术跨越 你有没有遇到过这样的困扰&#xff1a;心中有一个绝美的头像创意&…...

nuScenes 3D标注数据深度解析:从Box字段到可视化,理解自动驾驶感知的基石

nuScenes 3D标注数据深度解析&#xff1a;从Box字段到可视化&#xff0c;理解自动驾驶感知的基石 自动驾驶技术的快速发展离不开高质量数据集的支撑&#xff0c;而nuScenes作为业界公认的标杆级数据集&#xff0c;其丰富的3D标注信息为感知算法研发提供了坚实基础。本文将带您深…...

Excel VBA 技巧:让工作表中的形状宏自适应

在日常工作中,Excel 不仅仅是数据处理的工具,更是我们自动化办公的利器。今天我们要探讨的是如何让Excel工作表中的形状宏能够自适应地工作,即使在复制工作表到新的工作簿时也能保持其功能性。 问题背景 假设我们有一个工作簿BOOK1,其中包含一个名为TEST的工作表和一个名…...

基于STM32LXXX的数字电位器(MCP4017T-103E/LT)驱动应用程序设计

一、简介&#xff1a;MCP4017T-103E/LT 是 Microchip 公司推出的一款 7位&#xff08;128抽头&#xff09;数字电位器&#xff0c;采用 IC 接口控制。二、主要技术特性&#xff1a;参数值电阻值 (R_AB)10 kΩ抽头数128 (7-bit)接口IC (支持 Standard/ Fast Mode, 从机模式)存储…...