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

【Java】谈谈ClassLoader

一,概述

类加载器,顾名思义,就是通过class字节码生成Class对象的类

以下是ClassLoader的基本用途,即通过bytes字节码,生成一个class实例对象,

二,双亲委派

基于jdk21分析:

Java中ClassLoader有一套默认加载Class流程,称为双亲委派机制,它能实现类的唯一、安全加载,也避免了系统核心类被篡改。

jdk.internal.loader定义了三个核心ClassLoader,如下

注意到以上ClassLoader关系

APP_LOADER#parent == PLATFORM_LOADER;

PLATFORM_LOADER#parent == BOOT_LOADER;

BOOT_LOADER#parent == NULL

再看ClassLoader#loadClass默认实现,

1,从已经加载过的Class池中找到class,这即表明一个Class只加载一次;

2,优先从parent中加载Class,如果parent == null,则表示是BootClassLoader,通过findBootstrapClass加载,

3,如果parent加载类返回null,则通过自身findClass方法加载类,

实际的类加载,则在BuiltInClassLoader中重写,但仍是双亲委派

以上,便是双亲委派机制的核心实现,即类的加载依次从

BOOT_LOADER->PLATFORM_LOADER->APP_LOADER,

优先从BOOT_LOADER加载核心类,

再从PLATOFORM_LOADER加载依赖类,

最后加载App自身的类,

这避免了核心类被篡改,如java.lang.String(本地定义一个此类),

通过App加载自身类,调用findClass方法,APP_LOADER默认实现在BuiltInClassLoader#findClass

以上即在本地路径中查到class文件,通过defineClass解析生成Class,并且保存至环境中,便只加载了一次Class。

三,打破双亲委派

基于二的分析,使用APP_L

相关文章:

  • C++ 基于多设计模式下的同步异步⽇志系统-2项目实现
  • 消息中间件
  • AI音频核爆!Kimi开源“六边形战士”Kimi-Audio,ChatGPT语音版?
  • 【Linux】Centos7 在 Docker 上安装 Redis7.0(最新详细教程)
  • 成都蒲江石象湖旅游攻略之石象湖郁金香最佳观赏时间
  • 最佳实践-HENGSHI SENSE 可视化创作中如何引入数据集市的成果
  • Github 热点项目 rowboat 一句话生成多AI智能体!5分钟搭建企业级智能工作流系统
  • Redis 笔记(三)-Redis 基本知识及五大数据类型
  • 语音识别质量的跟踪
  • 【Unity完整游戏开发案例】从0做一个太空大战游戏
  • 火语言RPA--企业微信群通知
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day21
  • OpenGl ES 3.0 笔记一:初步概念
  • Node.js CSRF 保护指南:示例及启用方法
  • Macos m系列芯片环境下python3安装mysqlclient系列问题
  • Java 深度与实战 · 每日一读 :高频面试真题解析 · ReentrantLock / CAS / AQS 篇
  • JVM常见的垃圾回收器
  • PyDantic入门介绍:Python数据验证与解析的利器
  • WPF之XAML基础
  • Java + Spring Boot + MyBatis获取以及持久化sql语句的方法
  • 上海数学教育及数学科普专家陈永明去世,享年85岁
  • 柴德赓、纪庸与叫歇碑
  • 谢震业、梁小静等名将在列,世界田联接力赛中国队名单出炉
  • 习近平在中共中央政治局第二十次集体学习时强调,坚持自立自强,突出应用导向,推动人工智能健康有序发展
  • 居民被脱落的外墙瓦砖砸中致十级伤残,小区物业赔付16万元
  • 杨荫凯履新浙江省委常委、组织部部长,曾任中央财办副主任