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

相控阵雷达技术解析:从THAAD到5G应用

1. 萨德系统概述&#xff1a;现代反导防御的核心力量THAAD&#xff08;Terminal High Altitude Area Defense&#xff09;系统是美国陆军研发的末端高空区域防御系统&#xff0c;专门用于拦截处于末段飞行阶段的短程和中程弹道导弹。这套系统自2008年部署以来&#xff0c;已成为…...

手把手教你用fft npainting lama去除图片水印,效果惊艳!

手把手教你用fft npainting lama去除图片水印&#xff0c;效果惊艳&#xff01; 1. 引言&#xff1a;告别繁琐修图&#xff0c;AI一键去水印 你是否遇到过这样的情况&#xff1a;找到一张完美的图片素材&#xff0c;却被讨厌的水印破坏了整体美感&#xff1f;传统修图软件操作…...

如何全面提升GTA5游戏体验:YimMenu安全使用与功能优化终极指南

如何全面提升GTA5游戏体验&#xff1a;YimMenu安全使用与功能优化终极指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending…...

城通网盘下载加速终极解决方案:ctfileGet让你的文件传输速度提升10倍

城通网盘下载加速终极解决方案&#xff1a;ctfileGet让你的文件传输速度提升10倍 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否还在为城通网盘下载速度缓慢而烦恼&#xff1f;每次下载大文件都…...

如何利用垂直搜索引擎优化提升排名_网站评论优化对 SEO 排名的影响是什么

如何利用垂直搜索引擎优化提升排名 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为网站提升流量和吸引目标用户的重要手段。而在SEO策略中&#xff0c;垂直搜索引擎优化是一个逐渐被重视的方面。与通用搜索引擎不同&#xff0c;垂直搜索引擎&a…...

像素幻梦创意工坊保姆级教程:从安装到生成你的第一张像素画

像素幻梦创意工坊保姆级教程&#xff1a;从安装到生成你的第一张像素画 1. 准备工作&#xff1a;认识像素幻梦创意工坊 像素幻梦创意工坊(Pixel Dream Workshop)是一款基于FLUX.1-dev扩散模型的AI像素艺术生成工具。它采用明亮的16-bit像素风格界面&#xff0c;让艺术创作变得…...

Unity游戏翻译解决方案:多框架适配与实时翻译优化应用指南

Unity游戏翻译解决方案&#xff1a;多框架适配与实时翻译优化应用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator Unity游戏翻译技术正成为全球化游戏开发的关键环节&#xff0c;XUnity.AutoTranslat…...

3步打造手游键鼠操控系统:QtScrcpy突破触屏局限的高效解决方案

3步打造手游键鼠操控系统&#xff1a;QtScrcpy突破触屏局限的高效解决方案 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy 在移动游戏日益复杂的今天&#xff0c;触屏操作的物理限制…...

Qwen3-ASR性能优化:基于CNN的语音特征提取技术

Qwen3-ASR性能优化&#xff1a;基于CNN的语音特征提取技术 语音识别技术发展到今天&#xff0c;已经不再是实验室里的新奇玩具&#xff0c;而是我们日常生活中随处可见的实用工具。从手机语音助手到会议记录软件&#xff0c;从智能家居控制到车载语音交互&#xff0c;语音识别…...

Stable Yogi Leather-Dress-Collection 不同采样器(Sampler)生成效果对比测评

Stable Yogi Leather-Dress-Collection 不同采样器&#xff08;Sampler&#xff09;生成效果对比测评 最近在玩 Stable Yogi 这个专门生成皮革服装的模型&#xff0c;发现一个挺有意思的现象&#xff1a;同样的描述词&#xff0c;换一个采样器&#xff0c;出来的图可能天差地别…...