当前位置: 首页 > 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;顾需要针对指定浏…...

如何5分钟搭建抖音无水印视频解析工具:DouYinBot完整指南

如何5分钟搭建抖音无水印视频解析工具&#xff1a;DouYinBot完整指南 【免费下载链接】DouYinBot 该项目仅自用&#xff0c;不提供抖音视频下载 项目地址: https://gitcode.com/gh_mirrors/do/DouYinBot 还在为抖音视频的水印烦恼吗&#xff1f;DouYinBot是你的终极解决…...

对抗机器学习攻击范式解析:后门、对抗样本与权重攻击的攻防全景

1. 对抗机器学习攻击范式全景解析在AI模型日益渗透到关键决策领域的今天&#xff0c;其安全性问题已经从学术探讨演变为迫在眉睫的现实挑战。作为一名长期关注模型安全的研究者和实践者&#xff0c;我见过太多“表现优异”的模型在精心设计的微小扰动面前瞬间“失智”。对抗机器…...

开源AI工具真能替代商业方案?2024最新Benchmark数据揭示92%团队忽略的关键短板

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;开源AI工具真能替代商业方案&#xff1f;2024最新Benchmark数据揭示92%团队忽略的关键短板 2024年Q2由MLPerf与OpenLLM-Bench联合发布的跨模态AI工具基准报告覆盖全球147个生产级AI部署团队&#xff0c;结果显…...

2026年AI写作辅助网站实测精选:5款神器从选题到格式全流程护航

写论文的难处&#xff0c;是每个科研人和学生都心知肚明的“隐形负担”。选题无从下手&#xff0c;文献检索耗时费力&#xff0c;格式排版反复调整&#xff0c;查重降重更是让人抓耳挠腮。2026年的AI工具早已不再是冷冰冰的“文字机器”&#xff0c;而是进化成了能理解学术逻辑…...

i茅台自动预约系统终极指南:从零搭建智能抢购平台 [特殊字符]

i茅台自动预约系统终极指南&#xff1a;从零搭建智能抢购平台 &#x1f680; 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署&#xff08;本项目不提供成品&#xff0c;使用的是已淘汰的算法&#xff09; 项目地址…...

Gemini深度研究模式全解析(2024最新版API+多模态检索内参):谷歌内部技术白皮书级拆解

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Gemini深度研究模式的核心定位与演进脉络 Gemini深度研究模式并非单纯的功能叠加&#xff0c;而是Google面向复杂知识工作场景构建的推理范式跃迁。它将多跳检索、跨模态证据聚合与可验证推理链生成深度融合&…...

Adobe-GenP 3.0终极指南:5分钟快速免费解锁Adobe全系列软件

Adobe-GenP 3.0终极指南&#xff1a;5分钟快速免费解锁Adobe全系列软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 还在为Adobe Creative Cloud高昂的订阅费用发…...

搭建你的第一个AIGC工作流:基于LangChain实现多步链式调用与条件分支

系列导读 你现在看到的是《从0到1构建AIGC工作流自动化平台:架构、实践与运维全指南》的第 2/10 篇,当前这篇会重点解决:通过一个可运行的最小示例,让读者快速体会工作流的本质,并掌握LangChain基础用法。 上一篇回顾:第 1 篇《AIGC工作流自动化平台技术选型与架构设计…...

分布式接口幂等性设计:唯一索引、Token 与分布式锁

接口幂等性解决的是“同一个请求被执行多次&#xff0c;会不会造成重复业务效果”的问题。用户重复点击、网络重试、MQ 重复消费&#xff0c;都可能让同一业务被重复执行。 一句话概括&#xff1a;幂等就是多次调用和一次调用的业务结果一致&#xff1b;查询和按唯一值删除天然…...

BOM 物料清单科普

BOM Bill of Materials 物料清单科普PLM、ERP、MES、SAP、数字孪生中的 BOM 全链路应用目录 前言 从"天天对 BOM"的经典场景切入&#xff0c;抛出核心问题一、BOM 的本质 还原 BOM 的真实定义&#xff0c;破除"BOM 物料清单"的误解二、全景图谱 完整 BOM …...