`
ldwcmx
  • 浏览: 8554 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

类加载子系统

 
阅读更多

           类加载子系统是JVM体系中用于加载类的二进制字节码的重要组成部分,当一个类编译为class文件后,虚拟机便可以加载它。

          最底层的加载器是启动类加载器,它是虚拟机的组成部分,一般是c语言实现的,当然具体的虚拟机可以有不同的语言实现,它主要负责加载sun.boot.class.path下的java核心的类。还有一个是扩展类加载器,负责加载java.ext.dirs包下的类。最后是系统类加载器,负责加载java.class.path下的类,当然开发者还可以实现自己的类加载器来加载自己开发的类。我使用的是hotspot(TM)虚拟机。

 public static void main(String[] args) {
         System.out.print(System.getenv());//输出系统环境变量
         System.out.println(System.getProperties());//输出系统属性
  System.out.println(Thread.currentThread().getContextClassLoader().getParent());//输出扩展类加载器,它是系统类加载器的父类

 

System.out.println(Thread.currentThread().getContextClassLoader().getParent().getParent());//输出启动类加载器为null  
  
 }

         当我们自己实现一个框架的时候可以通过继承java.lang.ClassLoader类来实现自己的类加载器来加载框架核心代码。

 

 

      类加载器之间的关系是继承关系,启动类加载器是扩展类加载器的父类,扩展类加载器是系统类加载器的父类,用户自定义类加载器是系统加载器的子类,在加载一个类的时候加载器之间是委托关系,子类委托父类进加载,如果父类不能加载则由子类加载,这种机制有传递关系,就是说父类发现要加载的类不是它应该加载目录下的类,则提交给它的父类加载,直到启动类加载器,如果启动类加载器发现也不是它应该加载目录下的类,则有它自己加载,这种机制是出于安全性的考虑,当你想加载一个类来篡改父类加载器加载的类是不可能的。

      命名空间是由类加载器和完整包名组成的,同一个命名空间下的类可以相互访问。

 

     jdk中提供的自定义加载器有java.security.SecureClassLoader,java.net.URLClassLoader,javax.management.loading.MLet,它们之间是继承关系。

     当类被加载完成之后,虚拟机做了哪些操作呢?

     实际上虚拟机把加载进来的代码放置到方法区中,并解析了二进制class文件,并在堆内存中创建一个Class类型的对象与之关联,这个Class对象保存类的数据结构,之后虚拟机在连接和初始化阶段直接操作这个Class对象和方法区。有关类的连接和初始化后文会继续讨论。

     

分享到:
评论

相关推荐

    02 类加载子系统.pptx

    02 类加载子系统 PPT 介绍 JVM 的类加载子系统, 包括类加载阶段和流程、加载器分类和类加载机制等。

    2 类加载子系统.md,学习代码

    《深入理解Java类加载子系统》 在Java编程语言中,类加载子系统是JVM(Java虚拟机)的核心组成部分,它负责将.class文件加载到内存中,转换为可执行的Java对象。类加载子系统的工作流程对于理解和优化Java应用程序...

    02_类加载子系统.pptx

    类加载子系统是Java虚拟机(JVM)的重要组成部分,负责将字节码文件(.class文件)从磁盘、网络或其他数据源加载到内存中,并进行校验、解析和初始化,最终形成可以被JVM执行的类。这个过程对于Java程序的运行至关...

    类加载子系统探究111.md

    类加载子系统探究111.md

    类加载子系统.xmind

    自己总结的jvm中类加载子系统的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者

    Java8 Jdk JVM学习笔记、jdk1.8、SpringBoot、内存与垃圾回收、类加载子系统、运行时数据区、本地方法等

    Java8 Jdk JVM学习笔记、jdk1.8、...主要内容为 JVM 内存与垃圾回收、类加载子系统、运行时数据区、本地方法等。适合开发1-3年想对JVM学习的同学。 在之后的开发中,更加详细的了解JVM,可以进行JVM问题排查。

    monkey-knight#OfferMe2020#02-类加载子系统1

    加载JVM 有哪些类加载器:引导类加载器扩展类加载器系统类加载器自定义类加载器不同加载器可以加载哪些类:加载器的等级:引导类加载器 > 扩展类加载器 > 系统类

    JVM解毒——类加载子系统

    带着问题,尤其是面试问题的...类加载子系统 类加载机制概念 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制

    JVM类加载过程.pptx

    JVM主要组成部分包括类加载子系统、执行引擎、本地方法接口和运行时数据区。 类加载子系统是JVM的核心组件之一,它负责加载字节码文件到运行时数据区的方法区。类加载器(ClassLoader)将字节码文件加载到内存中,...

    深入理解Java虚拟机--类加载及执行子系统的案例与实战xmind文件

    深入理解Java虚拟机--类加载及执行子系统的案例与实战xmind文件

    JVM:类加载器子系统.pdf

    在程序中,最常用的类加载器主要有三个,分别是系统类加载器(System ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader),它们之间是包含关系,不是继承关系。...

    JVM底层原理课件PPT

    ### JVM底层原理——类加载子系统详解 #### 一、引言 Java虚拟机(JVM)作为Java程序运行的基础环境,其内部结构复杂且功能强大。本文将基于“JVM底层原理课件PPT”中关于类加载子系统的介绍进行深入解析。类加载子...

    jvm上篇笔记.md

    本文将从JVM概述出发,深入分析其工作原理,并详细介绍类加载子系统的重要性和运作机制。 ### JVM概述 #### 1. 什么是JVM? JVM(Java Virtual Machine),即Java虚拟机,是一种用于执行Java字节码的虚拟计算机。...

    JVM上篇+中篇.pdf

    JVM的架构模型包括多个组件,如类加载子系统、执行引擎、内存结构等。类加载子系统负责加载class文件,生成class对象,并初始化静态属性,存入方法区。执行引擎执行字节码指令,其中PC寄存器记录当前指令位置,...

    【隐匿的学习笔记】JVM(1) 类加载子系统

    松散了好久 回归状态 系统学习JVM 记个笔记 写点自己的理解 注: 博主所有博客内容的学习笔记都是从学习资料处学习得来,些许位置的思路会借鉴,但保证所有文章的所有内容(包括文字和图) 都是自己原创字是一个一个...

    JAVA大学教程(第五版)[18]

    类加载子系统中包含两类加载器:原生类加载器(primordial class loader)和类加载器对象(class loader objects)。原生类加载器是JVM实现的一部分,而类加载器对象则是Java应用的一部分。它们共同协作完成类的加载...

    JVM原理-jvm内存及相关图示

    JVM主要由类加载子系统、执行引擎、运行时数据区和Native Interface四部分组成。 类加载子系统 类加载子系统是JVM的主要组成部分,它的主要作用是将Java字节码文件加载到内存中,并将其转换成可执行的机器代码。类...

    类加载器(java)

    类加载器的工作机制遵循“双亲委派模型”:当一个类加载器接收到加载类的请求时,它首先会委托父加载器去尝试加载,只有在父加载器无法加载的情况下,子加载器才会尝试自己去加载。这种设计可以防止类的重复加载,并...

Global site tag (gtag.js) - Google Analytics