ClassLoad Of Java

news2024/11/25 23:18:34

序言

简单学习下ClassLoad的过程cuiyaonan2000@163.com

过程

        我们有一个x.java文件通过执行javac命令可以变成x.class文件,当我们调用Java命令的时候class文件会被装载到内存中,这个过程叫做classloader

       一般情况下我们自己写代码的时候会用到Java的类库,所以在加载的时候也会把Java类库相关的类也加载到内存中。装载完成之后会调用字节码解释器JIT即时编译器来进行解释和编译,编译完之后由执行引擎开始执行,执行引擎下面对应的就是操作系统硬件了。

执行引擎就会把解释和编译后的代码转换成硬件所能理解的语言区执行了cuiyaonan2000@163.com

 类加载器种类

BootstrapClassLoader 系统类加载器

BootstrapClassLoader并非java代码实现的,而是由C/C++代码编写的,它本身属于虚拟机的一部分,主要负责加载Java标准库的一些类,如 java.lang 包等,这些类通常位于 JDK 的 jre/lib 目录下。

ExtClassLoader 扩展类加载器/PlatformClassLoader 平台类加载器

负责加载Java扩展库的类,这些类通常位于JDK 的 jre/lib/ext目录下,在 Java 9 之后,由于模块化的引入,这个类加载器已经被废弃。

平台类加载器负责加载 JDK 自带的模块。这些模块通常位于 JDK 安装目录下的 jmods 文件夹中

APPClassLoader 系统类加载器

AppClassLoader 主要加载系统属性“java.class.path”配置下类文件,也就是环境变量 CLASS_PATH 配置的路径。因此 AppClassLoader 是面向用户的类加载器,我们自己编写的代码以及使用的第三方 jar 包通常都是由它来加载的。

双亲委派模式(Parents Delegation Model)

既然 JVM 中已经有了这 3 种 ClassLoader,那么 JVM 又是如何知道该使用哪一个类加载器去加载相应的类呢?答案就是:双亲委派模式

双亲委派模式(Parent Delegation Model)是 Java 类加载器体系中的一种设计模式。它描述了类加载器在加载类时应如何与其父加载器(parent class loader)进行协作。双亲委派模式可以确保类在加载过程中的安全性和避免多次加载同一个类。

双亲委派模式的工作原理如下:

  1. 当一个类加载器(ClassLoader)被要求加载一个类时,它首先会将加载请求委托给其父类加载器。
  2. 父类加载器会递归地将加载请求继续委托给它自己的父类加载器,直到请求到达启动类加载器(Bootstrap ClassLoader)。
  3. 启动类加载器会检查它是否能够加载该类。如果可以加载,它将加载这个类并返回;否则,它会将加载请求传递回给子加载器。
  4. 子加载器会检查它是否能够加载该类。如果可以加载,它将加载这个类并返回;否则,它会将加载请求传递回给下一个子加载器。
  5. 如果所有加载器都无法加载该类,那么 ClassNotFoundException 将被抛出。

双亲委派模式的优势:

  1. 避免类的重复加载:由于每个加载器只会尝试加载它的父加载器无法加载的类,这样可以确保同一个类不会被多次加载。
  2. 保护 Java 核心类库的安全性:由于启动类加载器是第一个尝试加载类的加载器,用户自定义的类加载器无法加载 Java 核心类库中的类。这可以防止核心类库被恶意代码篡改或替换。
  3. 有助于实现类的隔离:使用不同的类加载器可以实现类的隔离,这对于应用服务器等场景非常有用,因为它们需要隔离不同应用之间的类加载。


 

自定义类加载器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(6)(6.6) 恢复任务回放

文章目录 前言 6.6.1 配置 6.6.2 工作原理 6.6.3 局限性 前言 本页介绍了什么是"任务继续时后退"功能以及如何使用该功能。 !Note 从 4.1 版起,Plane、Copter 和 Rover 均可使用此功能。 在某些应用或运行区域,为了消除冲突…

Nat. Photonics:实时捕获了光子的量子纠缠!

渥太华大学的研究人员与罗马大学的Danilo Zia和Fabio Sciarrino合作,展示了一种新技术,可以实时可视化两个纠缠光子(构成光的基本粒子)的波函数。 研究成果以“Interferometric imaging of amplitude and phase of spatial biphot…

如何在 Opera 中启用DNS over HTTPS

DNS over HTTPS(基于HTTPS的DNS)是一种更安全的浏览方式,但大多数 Web 浏览器默认情况下不启用它。了解如何在 Opera 浏览器中启用该功能。 您可能不知道这一点,但您的网络浏览器并不像您希望的那样私密或安全。您会看到&#xff…

华为官方翻新产品上架首款PC产品,售价3699元起!

8月24日,华为官方翻新产品上架首款PC——HUAWEI Matebook 14s!产品搭载2.5K高刷触控屏,有第11代英特尔酷睿i7-113700H和酷睿i5-11300H两种处理器可选择,售价3699元起! 华为官方翻新PC,品质接近新机&…

node.js 简单使用 开始

1.概要 问:体验一下node.js 看一下如何运行。 答:使用命令 node 文件名.js 2.举例 2.1 代码准备(main.js) console.log(第一行node.js代码); 2.2 运行效果

Linux内核学习(八)—— 内存管理(基于Linux 2.6内核)

目录 一、页(page) 二、区(zone) 三、页操作 四、kmalloc() 五、vmalloc() 六、slab 分配器 七、在栈上的静态分配 一、页(page) 内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻 …

Crontab定时任务运行Docker容器(Ubuntu 20)

对于一些离线预测任务,或者D1天的预测任务,可以简单地采用Crontab做定时调用项目代码运行项目 Crontab简介: Linux crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令&…

微信通过好友自动回复怎么设置?微信怎么设置自动回复?

当通过了很多客户之后,员工没有办法及时的给每位客户发送欢迎消息,并且发送欢迎消息时也是由员工一个一个去发送给客户,这样既浪费了大量的时间,又给员工增加工作负担,降低工作效率。 我们可以设置自动发欢迎语&#…

小猫爪:嵌入式小知识16-XCP协议简介

小猫爪:嵌入式小知识16-XCP协议简介 0 目录1 前言2 XCP协议简介2.1 各种包2.1 CMD2.2 RES2.3 ERR2.4 EV2.5 SERV2.6 DAQ2.7 STIM2.8 总结 2.2 错误处理2.2.1 Time-out Error Handling2.2.2 Error Code Error Handling END 0 目录 小猫爪:嵌入式小知识15…

More Effective C++学习笔记(4)

目录 条款16:谨记 80 - 20 法则条款17:考虑使用lazy evaluation(缓式评估)条款18:分期摊还预期的计算成本条款19:了解临时对象来源条款20:协助完成 “ 返回值优化 ”条款21:利用重载…

余压监控在建筑加压送风系统中的应用

安科瑞 华楠 摘 要:从风量、风管和风口的设计、防烟部位正压控制方式等角度,分析了加压送风系统设计中需要注意的几点问题:风量的确定需合理有据;楼梯间风管和风口的设计需考虑均匀送风要求,前室风口设计确保不同楼层…

【地理图库】晨昏线示意图

声明:本资料整理,仅供学习!

JNPF快速开发平台:释放您的创造力,加速企业数字化转型

一、前言 在当今的数字化时代,企业需要快速响应市场变化,不断迭代和优化业务流程,以保持竞争力。然而,传统软件开发方式往往无法满足企业对于快速开发和灵活部署的需求。JNPF快速开发平台旨在解决这一问题,为企业提供高…

CCF HPC China2023 | 盛大开幕,邀您关注澎峰科技

2023年8月24日,以“算力互联智领未来”为主题的第十九届全国高性能计算学术年会(CCF HPC China 2023)在青岛红岛国际会议展览中心拉开帷幕。特邀嘉宾涵盖行业大咖,主持阵容同样是“重量级”——来自国家并行计算机工程技术研究中心…

如何快速打造线上展厅?线上展厅可以用在哪些行业?

引言: 随着科技的迅速发展,线上展厅作为一种创新的营销方式,正逐渐引领着不同行业的营销风潮。线上展厅以其独特的虚拟体验,为企业搭建了一个无界限的展示平台,让用户能够在虚拟空间中感受产品、服务与品牌文化。 一…

Java对象的初始化顺序

对象的初始化顺序(父类永远在子类前面,属性和方法谁写在上边谁先执行): 静态(只执行一次)--->非静态--->构造方法 静态成员和static块-->普通成员和非static块-->构造函数。 存在继承: 父类静态成员和static块-->子类静态成…

Resnet模型详解

1、Resnet是什么? Resnet是一种深度神经网络架构,被广泛用于计算机视觉任务,特别是图像分类。它是由微软研究院的研究员于2015年提出的,是深度学习领域的重要里程碑之一。 2、网络退化问题 理论上来讲,随着网络的层…

干货分享:可证明安全的隐私计算

“隐语”是开源的可信隐私计算框架,内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择,提供丰富的联邦学习算法和差分隐私机制 开源项目:github.com/secretflowgitee.com/secretflow 以下文章来源于DataFunTalk ,作者洪澄 D…

【实训项目】易行APP设计(c2c二手交易平台)

1.设计摘要 1.1市场背景 随着经济的迅速发展与科技日新月异的进步,家庭内的各项物品更新换代频率越来越快,人们购买新商品后越来越多旧的商品积压需要处理;在互联网电商的各种营销刺激下,消费者非常容易形成“冲动”消费&#x…

【Spring】一次性打包学透 Spring | 阿Q送书第五期

文章目录 如何竭尽可能确保大家学透Spring1. 内容全面且细致2. 主题实用且本土化3. 案例系统且完善4. 知识有趣且深刻 关于作者丁雪丰业内专家推图书热卖留言提前获赠书 不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很…