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

JVM类加载机制

回到2018年的抖音哈哈.

回顾下:

  1. java开发环境:

    java编译运行过程:
    • 1) 编译期:.java源文件,经过编译,生成.class字节码文件

      2) 运行期:JVM加载.class并运行.class(0和1)

      特点: 跨平台、一次编程,处处报错

    • 名词解释:

      1) JVM: java虚拟机

      加载.class并运行.class

      2) JRE: java运行环境

      除了包含JVM以外,还包含了运行java程序所必须的环境

      JRE = JVM+java系统类库(小零件)

      3) JDK: java开发工具包

      除了包含JRE以外,还包含了开发java程序所必须的命令工具

      JDK=JRE+编译、运行等命令工具

      结论:

      1) 运行java程序的最小环境为JRE

      2) 开发java程序的最小环境为JDK

Java中类加载器:

1.引导类加载器(启动类加载器):负责加载支撑JVM运行的位于JAR的lib类库.(该对象实际上是C++生成的对象)

BootstrapClassLoader

由引导类加载器负责加载创建其他类的加载器

2.扩展类加载器:负责加载支撑JVM运行的JRE的lib目录下的ext扩展目录下的jar包ExtensionClassLoader

3.应用程序类加载器:负责加载ClassPath路径下的类.主要就是自己写的类

ApplicationClassLoader

4.自定义加载器:负责加载用户自定义路径下的类

流程:

1.windows系统下,java.exe调用底层的jvm.dll文件创建java虚拟机(C++实现)

2.java虚拟机创建一个引导类加载器(C++实现)

3.引导类加载器加载sun.mis.Launcher创建其他类加载器

4.(其实加载的时候就初始化好了)通过Launcher.getLauncher()创建ExtClassLoader(扩展类加载器)和AppClassLoader(应用类加载器)

JVM启动器实例sun.mis.Launcher初始化使用单例模式,保证JVM虚拟机只有一个sun.mis.Launcher实例,在Launcher构造方法内部,创建了两个类加载器

分别是:

1.sun.misc.Launcher.ExtClassLoader(扩展类加载器)

2.sun.misc.Launcher.AppClassLoader(应用类加载器)

JVM默认使用Launcher.getClassLoader()方法返回AppClassLoader实例加载我们的应用程序

而 this.loader如下  是将ExtClassLoader做为参数给了AppClassLoader,因此也可以说ExtClassLoader是AppClassLoader生父

 大概就是这么个意思

关于双亲委派机制

 

 双亲委派机制说简单点就是,先找父亲加载,不行再由儿子自己加载

双亲委派机制的目的:

1.沙箱安全机制:防止核心 API库被随意篡改
2.避免类的重复加载:当父亲已经加载了该类时,就没有必要子ClassLoader再加载一
次,保证被加载类的唯一性

全盘负责委托机制
全盘负责:是指当一个ClassLoder装载一个类时,除非显示的使用另外一个ClassLoder,该类
所依赖及引用的类也由这个ClassLoder载入。
关于自定类加载器:百度.自定义加载器的父加载器是AppClassLoader.是父加载器....不是父类

自定义类加载器只需要继承java.lang.ClassLoader类.

ClassLoader类有两个核心方法,一个是loadClass(String str,boolean b)

上面这个方法,实现了双亲委派机制

还有一个方法是findClass 

默认是空实现

自定义类加载器主要是重写findClass方法

如果想打破双亲委派机制,那么自定义加载器重写ClassLoader里loadClass(String str,boolean b)方法,百度一堆

Tomcat打破双亲委派机制的原因在于它可能部署不同的应用,那么不同应用可能依赖于同一个第三方,但是不同版本的依赖,这样的话,不能要求这些第三方依赖只有一份,因要要保证这些依赖的独立存在,就需要打破双亲委派机制.另外就是相同依赖的类库只需要一份,不然负担太重
其实有点相互矛盾,指定需要打破双亲委派的路径即可

相关文章:

JVM类加载机制

回到2018年的抖音哈哈. 回顾下: java开发环境: java编译运行过程: 1) 编译期:.java源文件,经过编译,生成.class字节码文件 2) 运行期:JVM加载.class并运行.class(0和1) 特点: 跨平台、一次编程,处处报错 名词解释: 1…...

8.1 优化概述

数据库性能取决于数据库级别的几个因素,例如表、查询和配置设置。这些软件结构导致了硬件级别的 CPU 和 I/O 操作,您必须将其最小化并尽可能提高效率。在研究数据库性能时,首先要学习软件端的高级规则和准则,然后使用墙上的时钟时…...

从0到1一步一步玩转openEuler--14 openEuler DNF(YUM)配置管理

文章目录14.1 DNF配置文件14.1.1 配置main部分14.1.2 配置repository部分14.1.3 显示当前配置14.2 创建本地软件源仓库14.3 添加、启用和禁用软件源14.3.1 添加软件源14.3.2 禁用软件源14.3.3 启用软件源DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查…...

leetcode707 设计链表 带有输入和输出的

题目: 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节…...

100种思维模型之非sr思维模型-012

什么是sr? sr是stimulus-response的缩写,意思是刺激反应。 那么非sr思维模型就是非刺激反应思维模型的意思。 今天我们来聊聊非sr思维模型——一个提醒我们思考,提醒我们任何时刻都有选择权的思维模型。 本文依然从三个方面进行介绍,何谓…...

绿竹生物再冲刺港交所上市:暂未商业化,孔健夫妇为实控人

近日,北京绿竹生物技术股份有限公司(下称“绿竹生物”)在港交所递交招股书,准备在港交所主板上市,中金公司为其独家保荐人。据贝多财经了解,绿竹生物曾于2022年6月28日在港交所递表。 相较于此前招股书&am…...

加拿大MSB金融牌照申请方案

什么是加拿大MSB金融牌照? 根据犯罪所得(洗钱)和恐怖主义融资法案,您的企业必须在加拿大金融交易和报告分析中心 (FINTRAC) 注册成为货币服务企业。自 2020 年 6 月 1 日起,外国货币服务企业也必须在 FINTRAC 注册&…...

javaEE 初阶 — 滑动窗口

文章目录滑动窗口1 滑动窗口下如何处理丢包TCP 工作机制:确认应答机制 超时重传机制 连接管理机制 滑动窗口 确认应答机制、超时重传机制、连接管理机制 都是给 TCP 的可靠性提供支持的。 虽然事变的比较可靠了,但是是有牺牲的,那就是传输…...

大咖说·图书分享|狼书(卷3):Node.js高级技术

Node.js都有哪些需要掌握的高级技术?前端为什么同样需要学习? Node.js未来的发展趋势究竟如何?本期大咖说,Node布道师桑世龙携新作《狼书(卷3):Node.js高级技术》展开分享。 ● 嘉宾介绍 桑世龙:Node布道…...

1.5配置NBMA和P2MP网络类型

1.3.3实验5:配置NBMA和P2MP网络类型 1. 实验需求 控制OSPF DR的选举修改OSPF的网络类型2. 实验拓扑 配置NBMA和P2MP网络类型实验拓扑如图1-13所示。 图1-13 配置NBMA和P2MP网络类型 3. 实验步骤 帧中继的配置如图1-14和图1-15所示...

Java面试题

三次握手,四次挥手中,为什么要挥手四次 第一次握手,客户端发送同步报文到服务端,客户端知道自己有发送数据能力,不知道服务端是否有发送、接受数据能力。 第二次握手,服务端收到同步报文,并回复…...

opencv锁定鼠标定位

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...

机器连接和边缘计算

以一种高效、可扩展的方式进行连接和边缘计算的结合,解决了在工业物联网应用中的机器数据集成问题。 一 边缘计算 边缘计算描述了由中央平台管理的数据分散式处理。边缘计算对于工业物联网而言非常重要。在许多应用程序中,由于数据量非常大,…...

利用NGROK将本地网站发布为一个公开网站

一般与第三方服务集成时,需要提供https的回调URL,本地开发阶段可以利用NGROK将本地网站发布为公开的https网站。https://ngrok.com/downloadWindow下载地址:https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-windows-amd64.zip以Window…...

Vulnhub 渗透练习(一)—— Breach 1.0

环境搭建 环境下载: https://www.vulnhub.com/entry/breach-1,152/ 环境描述: Vulnhub 中对此环境的描述: VM 配置有静态 IP 地址 (192.168.110.140),因此您需要将仅主机适配器配置到该子网。 这里我用的是 VMware &#xff0…...

初探Spring采用Spring配置文件管理Bean

文章目录Spring容器演示--采用Spring配置文件管理Bean(一)创建Maven项目(二)添加Spring依赖(三)创建杀龙任务类(四)创建勇敢骑士类(五)采用传统方式让勇敢骑士…...

【手写 Vuex 源码】第十二篇 - Vuex 插件机制的实现

一,前言 上一篇,主要介绍了 Vuex 插件的开发,主要涉及以下几个点: Vuex 插件的使用介绍;Vuex 插件开发和使用分析;Vuex 插件机制的分析; 本篇,继续介绍 Vuex 插件机制的实现&…...

图像去噪技术简述

随着每天拍摄的数字图像数量激增,对更准确、更美观的图像的需求也在增加。然而,现代相机拍摄的图像不可避免地会受到噪声的影响,从而导致视觉图像质量下降。因此,需要在不丢失图像特征(边缘、角和其他尖锐结构&#xf…...

数据迁移——技术选型

日常我们在开发中,随着业务需求的变更,重构系统是很常见的事情。重构系统常见的一个场景是变更底层数据模型与存储结构。这种情况下就要对数据进行迁移,从而使业务能正常支行。 背景如下:老系统中使用了mongo数据库,由…...

第二十七章 java并发常见知识内容(CompletableFuture)

JAVA重要知识点CompletableFuture常见函数式编程操作创建 CompletableFuture静态工厂方法处理异步结算的结果异常处理组合 CompletableFuturethenCompose() 和 thenCombine() 区别并行运行多个 CompletableFutureCompletableFuture Java 8 才被引入的一个非常有用的用于异步编…...

Qwen3.5-4B-Claude-Opus Web镜像教程:跨域配置与前端集成方案

Qwen3.5-4B-Claude-Opus Web镜像教程:跨域配置与前端集成方案 1. 模型与镜像概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是基于 Qwen3.5-4B 的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该版本以…...

CISSP工作经验不够5年怎么办?助理级(Associate)申请、维持与转正全流程详解

CISSP工作经验不足5年?助理级认证的进阶指南与实战策略 信息安全领域的新人常面临一个尴尬局面:虽然通过了CISSP考试,却因工作经验不足无法获得正式认证。这种"持证却不能名正言顺"的困境,让许多职场新人感到迷茫。实际…...

从水果贵族到地摊零食,蓝莓的陨落告诉我们什么叫泡沫经济的真相

街边的老板们现在已经不用吆喝了,蓝莓摊子前自动聚集人群。十块钱两盒,十块钱三盒,曾经按个、按克卖的水果贵族,现在堆成山。有人拿着手机拍照发朋友圈,配文:"终于等到蓝莓自由了。"这种"自…...

LILYGO T-Connect Pro工业物联网控制器全解析

1. LILYGO T-Connect Pro工业物联网控制器深度解析在工业自动化领域,设备联网和远程控制的需求日益增长。LILYGO T-Connect Pro作为一款基于ESP32-S3的多协议工业物联网控制器,集成了Ethernet、WiFi、蓝牙、LoRa等多种通信方式,以及RS232、RS…...

机器学习工程师必备的Docker容器化实践指南

1. 为什么机器学习工程师需要Docker?三年前我刚加入一家AI创业公司时,遇到过这样的场景:团队花了两个月训练的推荐模型,在测试环境表现优异,但部署到生产环境后准确率直接腰斩。排查三天后发现是CUDA版本不匹配导致GPU…...

egergergeeert惊艳效果:银发少女插画中发丝细节、布料褶皱、光影过渡展示

egergergeeert惊艳效果:银发少女插画中发丝细节、布料褶皱、光影过渡展示 1. 效果亮点概览 egergergeeert文生图镜像在角色插画创作中展现出惊人的细节表现力,特别是在以下三个方面尤为突出: 发丝细节:能够生成单根分明的发丝效…...

R语言机器学习实战:从环境配置到模型部署

1. 为什么选择R语言进行机器学习R语言在统计分析和数据可视化领域已经深耕二十余年,这使它成为机器学习实践的天然选择。我最初接触R是在研究生阶段的生物统计课程,当时就被它强大的数据处理能力所震撼。与Python这类通用语言不同,R是专门为统…...

自动化任务系列之五:PDF批量转换+自动清理——文件格式规范化工作流

凌晨三点,项目群里弹出一条消息:“这周要给客户交付全套图纸,但是那个AI文件转PDF转了两天还没转完,你们谁去盯着一下?” 我盯着屏幕,整个人都傻了。48小时的等待,换回来的是服务器上一堆半成品…...

梯度下降法:机器学习的核心优化算法解析

1. 梯度下降法概述 梯度下降是现代机器学习和深度学习中最核心的优化算法之一。想象你站在一座云雾缭绕的山上,能见度只有脚下几米,如何找到下山的最快路径?梯度下降就是解决这类问题的数学方法——它通过计算当前位置最陡峭的下降方向&#…...

[特殊字符]基于Vue与Django构建的高性能电商网站系统(含完整源码+部署指南)

温馨提示:文末有联系方式 技术架构说明 本电子商城系统采用主流前后端分离架构:前端基于轻量高效、生态丰富的Vue.js框架开发;后端依托功能强大、安全稳定的Django Web框架;核心开发语言为Python;数据持久层选用高性能…...