2.JVM-通俗易懂理解类加载过程

一、类加载基本过程

------------记录----------------

二、JVM层面理解类加载

Launcher()类里面定义了 先找扩展类加载器然后在使用自定义加载器,引导类加载器是通过JNI调用C++代码

下图是扩展类加载器双检索实现(单例模式实现)

------------记录----------------
  • 类加载器之间的关系父子关系 parent ,也不是传统意义上的面向对象继承,而是顺序执行,Launcher类中定义的.
  • 扩展类加载器是单例模式
  • 如何保证安全防篡改:"加载器+包名+类名"

三、双亲委派

双亲委派核心代码,一共五行,主要思想就是递归

  • 什么类才是唯一的类:"包名+类名"

例如:自己写一个String名,main方法执行不了,

------------记录----------------
  • 为什么使用双亲委派?
  • 如何打破双亲委派(如何设计一个自己的实现类)?

主要是重写loadClass方法,改变递归调用

java 复制代码
public class CustomClassLoader extends ClassLoader {

    @Override
    public Class<?> loadClass(String name) throws ClassNotFoundException {
        // 1. 针对特定类,自己加载(跳过父类)
        if (name.startsWith("com.example.myapp")) {
            return findClass(name);
        }
        // 2. 其他类仍走默认的双亲委派
        return super.loadClass(name);
    }

    @Override
    protected Class<?> findClass(String name) {
        // 从自定义路径加载类字节码
        byte[] classData = loadClassData(name);
        return defineClass(name, classData, 0, classData.length);
    }

    private byte[] loadClassData(String className) {
        // 实现类文件读取逻辑(如从特定目录、网络等)
        // ...
    }
}

四、类加载器的应用

  • Tomcat中如何实现不同服务之间隔离(使用类加载器实现)

Tomcat中公共组件的使用了双亲委派,再往上就是传统的JDK类加载器,不同服务有自己服务的类型加载器

Tomcat公共服务共同使用一个类加载器,不同服务到这一层就打破双亲委派实现隔离

其他

如果帮助到了您记得点个赞谢谢!

相关推荐
Slow菜鸟5 分钟前
Java开发规范(十一)| 数据全生命周期治理规范—Java应用的“数据资产化手册”
java·servlet·oracle
丸码25 分钟前
Java异常体系全解析
java·开发语言
v***885626 分钟前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
q***494526 分钟前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
IMPYLH33 分钟前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
曾经的三心草34 分钟前
基于正倒排索引的Java文档搜索引擎1-实现索引模块-实现Parser类
java·开发语言·搜索引擎
vx_bscxy3221 小时前
告别毕设焦虑!Python 爬虫 + Java 系统 + 数据大屏,含详细开发文档 基于web的图书管理系统74010 (上万套实战教程,赠送源码)
java·前端·课程设计
字节拾光录1 小时前
Java工具库三足鼎立:Hutool、Apache Commons、Guava深度测评与场景化选型指南
java·apache·guava
爱学习的小可爱卢1 小时前
Java UDP编程实战:UDP数据报套接字编程DatagramPacket、DatagramSocket 、InetSocketAddress
java·udp·udp数据报
未来之窗软件服务1 小时前
幽冥大陆(三十五)S18酒店门锁SDK go语言——东方仙盟筑基期
java·前端·golang·智能门锁·仙盟创梦ide·东方仙盟·东方仙盟sdk