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

【jvm】类加载器的分类

目录

        • 一、说明
        • 二、示例
          • 2.1 代码
          • 2.2 截图
        • 三、启动类加载器
        • 四、扩展类加载器
        • 五、应用程序类加载器

一、说明

  • 1.jvm支持两种类型的类加载器,分别是引导类加载器(bootstrap classloader)和自定义类加载器(user-defined classloader)
  • 2.自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,java虚拟机规范却没有这么定义,而是将所有派生于抽象类classloader的类加载器都划分为自定义类加载器
  • 3.在程序中,最常见的类加载器有引导类加载器、扩展类加载器、系统类加载器和自定义类加载器,是包含关系,不是上下层关系,也不是父类的继承关系
  • 4.引导类加载器是c语言编写实现的,代码无法获取到

二、示例

2.1 代码
package com.learning.classloader;public class ClassLoaderLearning {public static void main(String[] args) {// 获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();System.out.println(systemClassLoader);// 获取其上层: 扩展类加载器ClassLoader extClassLoader = systemClassLoader.getParent();System.out.println(extClassLoader);// 试图获取其上层: 获取不到引导类加载器ClassLoader bootstrapClassLoader = extClassLoader.getParent();System.out.println(bootstrapClassLoader);// 对于用户自定义类型: 默认使用系统类加载器进行加载ClassLoader classLoader = ClassLoaderLearning.class.getClassLoader();System.out.println(classLoader);// String类型: 使用引导到加载器进行加载的,java的核心类库都是使用引导类加载器进行加载的ClassLoader stringClassLoader = String.class.getClassLoader();System.out.println(stringClassLoader);}
}
2.2 截图

在这里插入图片描述

三、启动类加载器

  • 1.又叫引导类加载器、bootstrap classloader
  • 2.启动类加载器使用c/c++语言实现的,嵌套在jvm内部
  • 3.它用来加载java的核心库(java_home/jre/lib/rt.jar、resources.jar或sun.boot.class.path路径下的内容),用于提供jvm自身需要的类
  • 4.并不继承自java.lang.ClassLoader,没有父加载器
  • 5.加载扩展类和应用程序类加载器,并指定为他们的父类加载器
  • 6.处于安全考虑,bootstrap启动类加载器只加载包名为java、javax、sun等开头的类

四、扩展类加载器

  • 1.extension classloader
  • 2.java语言编写,由sun.misc.Launcher$ExtClassLoader实现
  • 3.派生于ClassLoader类
  • 4.父类加载器为启动类加载器
  • 5.从java.ext.dirs系统属性所指定的目录中加载类库,或从jdk的安全目录的jre/lib/ext子目录(扩展目录)下加载类库。如果用户创建的jar放在此目录下,也会自动由扩展类加载器加载

五、应用程序类加载器

  • 1.AppClassLoader
  • 2.java语言编写,由sun.misc.Launcher$AppClassLoader实现
  • 3.派生于ClassLoader类
  • 4.父类加载器为扩展类加载器
  • 5.负责加载环境变量classpath或系统属性java.class.path指定路径下的类库
  • 6.该类加载是程序中默认的类加载器,一般来说,java应用的类都是由它来完成加载
  • 7.通过ClassLoader$getSystemClassLoader()方法可以获取到该类加载器
http://www.lryc.cn/news/122361.html

相关文章:

  • 电路基础之电容
  • 函数柯里化
  • 【HBZ分享】ES中的Reindex重建索引
  • 【PostgreSQL】几个提高性能的小特性
  • [C语言] 指针
  • win10在vmware15中安装macos10.13系统
  • Node.js:实现遍历文件夹下所有文件
  • Git详解及使用
  • Jmeter设置中文的两种方式,建议使用第二种
  • 【ARM 嵌入式 编译系列 7.1 -- GCC 链接脚本中节区及各个段的详细介绍】
  • 一文读懂HTML
  • MOCK测试
  • Flutter源码分析笔记:Widget类源码分析
  • PyTorch 微调终极指南:第 2 部分 — 提高模型准确性
  • MySQL数据库----------安装anaconda---------python与数据库的链接
  • nuxt页面布局
  • mac编译ffmpeg
  • 如何让你的图片服务也有类似OSS的图片处理功能
  • Oracle PL/SQL 类型(Type):索引表、嵌套表、变长数组、pipelined 管道
  • Web 服务器 -【Tomcat】的简单学习
  • armbian使用1panel快速部署部署springBoot项目后端
  • Streamlit 讲解专栏(八):图像、音频与视频魔法
  • python使用装饰器记录方法耗时
  • JavaWeb课程学习--Day01
  • Spring Boot单元测试使用MockBean注解向Service注入Mock对象
  • Java中使用instanceof判断对象类型
  • postman测试后端增删改查
  • 根据源码,模拟实现 RabbitMQ - 通过 SQLite + MyBatis 设计数据库(2)
  • 1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡
  • android 如何分析应用的内存(十七)——使用MAT查看Android堆