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

实用指南:JVM(十)-- 类的加载器

目录

一、概述

1. 类的加载分类

2. 类加载机制的基本特征

二、类加载器的分类

1. 引导类加载器

2. 扩展类加载器

3. 系统类加载器

三、双亲委派机制

1. 定义与本质

2. 优势和劣势

3. 破坏双亲委派机制

四、沙箱安全机制

五、自定义类加载器

1. 为什么要自定义类加载器?

2. 实现方法


一、概述

JVM执行类加载机制的前提。就是类加载器

Java的核心组件,就是ClassLoader所有的Class都是由ClassLoader进行加载的,ClassLoader负责经过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader去改变类的链接和初始化行为。至于它是否可以运行,则由执行引擎决定。

1. 类的加载分类

2. 类加载机制的基本特征

二、类加载器的分类

JVM协助两种类型的类加载器,分别为引导类加载器(启动类加载器)和自定义类加载器

启动类加载器是使用C++搭建的,其他的加载器都是使用Java来达成的。

1. 引导类加载器

该加载器用来加载Java的核心类库,用于提供JVM自身需要的类。

它用于加载扩展类加载器和应用程序类加载器,并指定为它们的父类加载器。

2. 扩展类加载器

3. 系统类加载器

自定义的类默认使用体系类加载器。

三、双亲委派机制

1. 定义与本质

双亲委派机制就是为了保证类的唯一性,只能被加载一次。

2. 优势和劣势

优势:

  • 避免类的重复加载,确保了一个类的全局唯一性。
  • 保护程序安全,防止核心API被篡改。

劣势:

  • 检查类是否加载的委托过程是单向的,这个方式哪怕从结构上来说比较清晰,使各个ClassLoader的职责非常明确,不过会带来一个挑战,即顶层的ClassLoader无法访问底层的ClassLoader所加载的类

3. 破坏双亲委派机制

第一次:

第二次:


第三次:

四、沙箱安全机制

沙箱机制就是将Java代码限定在虚拟机特定的运行范围中,并且严格限制代码对本地系统资源的访问。通过这样的措施来保证对代码的有限隔离,防止对本地环境造成破坏。

五、自定义类加载器

1. 为什么要自定义类加载器?

  • 隔离加载类:在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如:阿离内部某容器的框架利用自定义类加载器确保应用中依赖的jar包不会影响到中间件运行时使用的jar包。
  • 修改类加载的方式:类的加载模型并非强制,可以根据实际情况在某个时间点按需进行动态加载。
  • 扩展加载源:比如从数据库、网络等地方进行加载。
  • 防止源码泄露:Java代码容易被编译和篡改,可以进行编译加密。那么类加载器也需要自定义,还原加密的字节码。

2. 实现方法

http://www.jsqmd.com/news/38510/

相关文章:

  • Qoder 降价,立即生效!首购 2 美金/月
  • AE扩展-After Ease v1.1.4 关键帧动画曲线缓入缓出调节
  • 更新了!微信公众号文章数据批量导出excel软件1.1版,轻松实现统计分析
  • 中国数据集成平台TOP10综合评估报告(2025)
  • 从“实时分账”到“智能问数”:汇付天下以“Data Agent”重塑支付业务决策效率
  • 热身赛总结 题解
  • 2025年气流流型检测仪品牌推荐与选择制造企业权威推荐榜单:灌装机气流流型检测仪/气流流型验证服务/烟雾发生器源头厂家精选
  • 告别重复“点点点”!基于Dify工作流,打造能思考、会决策的自主测试智能体
  • 开盖扫码领红包小程序系统:实体商家的营销增长利器
  • Vue---开发数字大屏大屏
  • es 如果主分片坏了,一个副本分片是最新的和主分片一样怎么操作变为主分片怎么操作
  • el-table展开行内容增加后没有出现滚动条
  • 海报积分商城小程序:高效吸粉与礼品兑换的全能解决方案
  • 智能体同工作流的关系和区别
  • 出入门禁管理应用:智能高效的出入口管控解决方案
  • 习题解析之:正负交错数列前n项和
  • vmware+centos7虚拟机连接不到网络的问题
  • 对象转字典列表字典转对象
  • 高效赋能 B2B 贸易:区域化智能订货配送系统全方位解析
  • 详细介绍:【Kylin V10】Ambari3.0.0 安装 Unexpected error Ambari repo file path not set for current OS 报错解决
  • TCP和UDP区别
  • python异步协程
  • 设计QQ,网络协议如何设计
  • 实战干货:Apache DolphinScheduler 参数使用与优化总结
  • 代码随想录Day8_字符串
  • 实用指南:Rust Slint实现列表式消息提示(Notification Dialog)源码分享
  • 软件工程团队作业2
  • 逆向基础--数据传输指令xlat push pop lea-lds-les (11)
  • RED 状态
  • EMS4100N芯祥科技USB3.1高速双向模拟开关芯片资料,可pin对pin替代ASW3410