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

【JVM篇】什么是类加载器,有哪些常见的类加载器

文章目录

  • 🍔什么是类加载器
  • 🛸有哪些常见的类加载器

在这里插入图片描述

🍔什么是类加载器

负责在类加载过程中,将字节码信息以流的方式获取并加载到内存当中

🛸有哪些常见的类加载器

  • 启动类加载器
    启动类加载器是有Hotspot虚拟机通过的类加载器,加载核心类
    默认加载Java安装目录 / jre / lib下面的类文件
    在这里插入图片描述

  • 扩展类加载器
    扩展类加载器是jdk中提供的,是使用Java编写的类加载器,加载扩展类
    默认加载Java安装目录 / jre / lib / ext 下的类文件
    在这里插入图片描述

  • 应用程序加载器
    应用程序加载器是jdk中提供的,使用Java编写的类加载器,加载应用程序classpath下的类
    在这里插入图片描述

  • 自定义类加载器允许用户自行实现类加载的逻辑,可以从网络,数据库等来源加载类的信息
    自定义类加载器需要继承ClassLoader抽象类,重写findClass方法

下面我们来写一个自定义类加载器
我们随便找一个class文件(不知在哪里找文件的同学可以参考这一篇文章 字节码文件)在这里插入图片描述
我们使用jclasslib双击打开这个文件
在这里插入图片描述
可以看到这个类名位于固定目录下,不能被启动类加载器,扩展类加载器,应用程序加载器加载,所以我们选择自定义类加载器
代码如下

我们在pom文件中写入下面的代码

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency>
package org.JVM;import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;public class MyClassLoader extends ClassLoader{@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException{//com . yupi . springbootinit . MainApplication .classString fileName = name.substring(name.lastIndexOf(".")+1)+".class";byte[] bytes=new byte[0];try {bytes= FileUtils.readFileToByteArray(new File("F:\\jvm\\data\\"+fileName));} catch (IOException e) {e.printStackTrace();}return defineClass(name, bytes, 0, bytes.length);}public static void main(String[] args) throws ClassNotFoundException {MyClassLoader myClassLoader = new MyClassLoader();Class<?> clazz =  myClassLoader.loadClass("com.yupi.springbootinit.MainApplication");//打印类的字段Field[] declaredFields = clazz.getDeclaredFields();for (Field field : declaredFields) {System.out.println(field.getName());}//打印类加载器的名称System.out.println(clazz.getClassLoader());}
}

在这里插入图片描述
我们来到jclasslib里面看一下,发现如此

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

http://www.lryc.cn/news/302040.html

相关文章:

  • STM32—DHT11温湿度传感器
  • 相机图像质量研究(31)常见问题总结:图像处理对成像的影响--图像差
  • MySQL之select查询
  • Android MMKV 接入+ 替换原生 SP + 原生 SP 数据迁移
  • C#上位机与三菱PLC的通信07--使用第3方通讯库读写数据
  • LiveGBS流媒体平台GB/T28181常见问题-基础配置流媒体服务配置中本地|内网IP外网IP(可选)外网IP收流如何配置
  • 微服务- 熔断、降级和限流
  • 电路设计(20)——数字电子钟的multism仿真
  • 【论文阅读笔记】Contrastive Learning with Stronger Augmentations
  • 前端win10如何设置固定ip(简单明了)
  • 数据结构1.0(基础)
  • anomalib1.0学习纪实-续2:三个文件夹
  • 【递归】【后续遍历】【迭代】【队列】Leetcode 101 对称二叉树
  • Nginx https反向代理
  • zip解压缩
  • 电动五金工具行业调研:政策促进市场发展
  • 【矩阵】托普利茨矩阵
  • DS:八大排序之归并排序、计数排序
  • 由斐波那契数列探究递推与递归
  • 红队打靶练习:IMF: 1
  • 密码管理局以及什么是密评?为什么要做密评(商用密码应用安全性评估)?
  • 六、Datax通过json字符串运行
  • 关于数据库
  • 洛谷C++简单题小练习day14—闰年推算小程序
  • 房企关注的典型数字化场景之一:数字营销
  • BMS再进阶(新能源汽车电池管理系统)
  • K8s Deployment挂载ConfigMap权限设置
  • 百度智能云分布式数据库 GaiaDB-X 与龙芯平台完成兼容认证
  • 模拟电子技术——振荡器基本原理、RC桥式振荡器、矩形波发生电器
  • Vue3+Vite+TS+Pinia+ElementPlus+Router+Axios创建项目