6类加载器深入解析与重要特性剖析

sunhao1234 sunhao1234     2023-04-17     236

关键词:

6.1、类加载器介绍

  类加载器用来把类加载到java虚拟机中。从JDK1.2版本开始,类的加载过程采用“双亲委托机制”,这种机制能更好的保证java平台的安全。在“双亲委托机制”中,除了java虚拟机自带的根类加载器外,其余的类加载器都有且只有一个父加载器。双亲委托机制将在下章介绍。

6.2、类加载器分类

有两种类型的类加载器:

  • java虚拟机自带的类加载器
  • 根类加载器(Bootstrap)
    • 该加载器没有父加载器,它负责加载虚拟机的核心类库,如java.lang.*等。根类加载器从系统属性sun.boot.class.path所指定的目录中加载类库。根类加载器的实现依赖底层操作系统,属于虚拟机实现的一部分,没有继承java.lang.ClassLoader类。
  • 扩展类加载器(Extension)
    • 它的父加载器为根类加载器。它从java.ext.dirs系统属性所指定的目录中加载类库,或者从JDK的安装目录的jrelibext子目录(扩展目录)下加载类库,如果把用户创建的jar文件放在这个目录下,也会自动由扩展类加载器加载。扩展类加载器是纯java类,是java.lang.ClassLoader类的子类。
  • 系统(应用)类加载器(System)
    • 也称为应用类加载器,它的父加载器为扩展类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中加载类,它是用户自定义的类加载器的默认父加载器。系统类加载器是纯java类,是java.lang.ClassLoader类的子类。
  • 用户自定义的类加载器
  • java.lang.ClassLoader的子类
  • 用户可以定制类的加载方式,java提供了抽象类java.lang.ClassLoader,所有用户自定义的类加载器都应该继承该类

6.3、类的加载时机

  类加载器并不需要等到某个类被程序“首次主动使用”时再加载它。

  JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在“程序首次主动使用”时才报告错误(LinkageError错误),如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误。

  点击查看【java程序对类主动使用的7种情况

6.4、类的加载

  类的加载指的是将类的class文件中的二进制数据读入到内存中,并将其放置在运行时数据区的方法区内,然后在内存中创建一个java.lang.Class对象。Class对象封装了类在方法区内的数据结构,并且向java程序员提供了访问方法区内的数据结构的接口。

jvm原理(22)线程上下文类加载器本质剖析与实做&serviceloader在spi中的重要作用分析

线程类上下文加载器的一般使用模式(获取-使用-还原)ClassLoaderclassLoader=Thread.currentThread().getContextClassLoader();tryThread.currnetThread().setContextClassLoader(targetTccl);myMethod();finallyThread.currentThread() 查看详情

java系列文章(全)

...(一)--类的主动使用与被动使用深入剖析Classloader(二)-根类加载器,扩展类加载器与系统类加载器深入理解JVM—JVM内存模型JVM-堆与栈JVM调优总结-基本垃圾回收算法JVM调优总结-垃圾回收面临的问题JVM调优总结-分代垃 查看详情

深入拆解类加载器,这样的姿势你还不懂吗?(代码片段)

本文导读:1、前奏,举个生活中的小栗子2、为何Java类型加载、连接在程序运行期完成?3、一个类在什么情况下才会被加载到JVM中?什么是主动使用、被动使用?代码示例助你透彻理解类初始化的时机。4、类的加载(Loading)内... 查看详情

深入理解jvm类加载器与双亲委派模型

...rticle/details/51332866,http://www.cnblogs.com/lanxuezaipiao/p/4138511.html加载类的开放性类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义 查看详情

深入剖析java并发之阻塞队列linkedblockingqueue与arrayblockingqueue

...举类型(enum)深入理解Java注解类型(@Annotation)深入理解Java类加载器(ClassLoader)深入理解Java并发之synchronized实现原理Java并发编程-无锁CAS与Unsafe类及其并发包Atomic深入理解Java内存模型(JMM)及volatile关键字剖析基于并发AQS的重入 查看详情

深入理解stream之原理剖析

...然是JDK1.8。所以,我们有必要聊一聊Java8的一些新特性。深入理解lambda的奥秘深入理解Stream之原理剖析深入理解Stream之foreach源码解析深入浅出NPE神器Optional谈谈接口默认方法与静态方法深入浅出重复注解与类型注解深入浅出JVM元... 查看详情

jvm——深入解析原理和运行机制类加载器

      上次我们说了一下jvm中类加载的过程,大概有加载,连接(验证,准备,解析),初始化这么几个步骤,当然要实现这些功能就需要有加载器,今天我们就来说说jvm中的类加载器。一、... 查看详情

深入理解java虚拟机--虚拟机类加载机制(代码片段)

文章目录1.虚拟机类加载机制说明2.类生命周期2.1类生命周期总述2.2加载2.3验证2.3.1验证的目的2.3.2验证的四个方面2.4准备2.4.1准备的目的2.5解析2.5.1解析的目的2.5.2补充概念2.6初始化2.6.1初始化阶段说明2.6.2<clinit>方法说明2.7卸... 查看详情

深入理解java类加载器:java类加载原理解析

...肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失... 查看详情

《ssm深入解析》目录导航与汇总

《SSM深入解析》文章目录1谈谈SSM框架和Redis2类加载器、反射和动态代理3设计模式4了解SpringMVC5SpringMVC基础6深入SpringMVC的九大组件7SpringMVC基础应用8SpringMVC核心应用9MyBatis组件10MyBatis的XML配置文件11MyBatis的XML映射文件12动态SQL(... 查看详情

jvm——深入解析原理和运行机制类加载器

      上次我们说了一下jvm中类加载的过程,大概有加载,连接(验证,准备,解析),初始化这么几个步骤,当然要实现这些功能就需要有加载器,今天我们就来说说jvm中的类加载器。一、... 查看详情

深入理解java类

JVM类生命周期概述:加载时机与加载过程https://blog.csdn.net/justloveyou_/article/details/72466105 深入理解Java类加载器(一):Java类加载原理解析https://blog.csdn.net/justloveyou_/article/details/72217806 深入理解Java对象的创建过程:类的初始化... 查看详情

jvm进阶之类加载器详解(代码片段)

类加载器详解一、类加载器概述1.作用2.分类3.重要性4.命名空间5.特性二、类加载器分类1.基本概述2.引导类加载器3.扩展类加载器4.系统类加载器5.自定义类加载器三、类加载器测试1.获取类加载器方式2.获取类加载器示例四、类加... 查看详情

jvm进阶之类加载器详解(代码片段)

类加载器详解一、类加载器概述1.作用2.分类3.重要性4.命名空间5.特性二、类加载器分类1.基本概述2.引导类加载器3.扩展类加载器4.系统类加载器5.自定义类加载器三、类加载器测试1.获取类加载器方式2.获取类加载器示例四、类加... 查看详情

jvm原理(23)线程上下文类加载器实战分析与难点剖析

我们紧接着上一个例子的代码进行:publicclassMyTest26publicstaticvoidmain(String[]args)ServiceLoader<Driver>serviceLoader=ServiceLoader.load(Driver.class);Iterator<Driver>iterator=serviceLoad 查看详情

jvm原理(19)平台特定的启动类加载器深入分析与自定义系统类加载器详解

程序:publicclassMyTest23publicstaticvoidmain(String[]args)System.out.println(System.getProperty("sun.boot.class.path"));System.out.println("------------------------------------------- 查看详情

第六章深入分析classloader工作机制

  classLoader是类加载器,负责将Class加载到JVM中,还有一个作用是审查每个类由谁加载,它是一种父优先的等级加载机制。   还有一个任务是,将class字节码重新解析成JVM统一要求的对象格式。 6.1ClassLoader类结... 查看详情

《深入理解jvm——类加载器》

JVM深入理解JVM(6)——类加载器 PostedbyCrowonAugust21,2017虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流(即字节码)”这个动作放到Java虚拟机外部去实现,以便让应用程序自... 查看详情