本文什么JVM向大家介绍一下ClassLoader的相关知识,ClassLoader专门负责类文件装入到内存,相信本文介绍一定会让你有所收获。
深入JVM:关于ClassLoader的一些知识
一.什么是ClassLoader?
Java程序并不是一个原生的可执行文件,而是由许多独立的类文件组成,每一个文件对应一个Java类.此外,这些类文件并非立即全部装入内存的,而是根据程序需要装入内存。ClassLoader专门负责类文件装入到内存.
二.ClassLoader的体系结构?
从上图我们就可以看出类加载器之间的父子关系(注意不是类的集继承关系)和管辖范围。
(1)BootStrap是最顶层的类加载器,它是由C++编写而成,并且已经内嵌到JVM中了,主要用来读取Java的核心类库JRE/lib/rt.jar
(2)ExtensionClassLoader是是用来读取Java的扩展类库,读取JRE/lib/ext/*.jar
(3)AppClassLoader是用来读取CLASSPATH指定的所有jar包或目录的类文件
(4)CustomClassLoader是用户自定义编写的,它用来读取指定类文件
三.什么是双亲委派模型?
双亲委派的模型可以通过下面的过程体现出来:
(1)"A类加载器"加载类时,先判断该类是否已经加载过了;
(2)如果还未被加载,则首先委托其"A类加载器"的"父类加载器"去加载该类,这是一个向上不断搜索的过程,当A类所有的"祖宗类加载器"(包括了bootstrapclassloader)都没有加载到类,则回到发起者"A类加载器"去加载,如果还加载不了,则抛出ClassNotFoundException.
更详细的信息你可以去参看java.lang.ClassLoader的loadClass(Stringname,booleanresolve)方法,代码摘要如下:
- //First,checkiftheclasshasalreadybeenloaded
-
Classc=findLoadedClass(name);
-
if(c==null){
- try{
- if(parent!=null){
-
c=parent.loadClass(name,false);
- }else{
-
c=findBootstrapClass0(name);
- }
- }catch(ClassNotFoundExceptione){
- //Ifstillnotfound,theninvokefindClassinorder
- //tofindtheclass.这里的findClass方法应该被重写,
- 默认情况下他是直接抛出ClassNotFoundException
-
c=findClass(name);
- }
那我们如何去验证这个模型呢?我们看下面这段程序,找出ClassLoaderTest的类加载器和他的所有祖宗加载器。
- packagecom.classloader.test;
- publicclassClassLoaderTest{
- publicstaticvoidmain(String[]args){
-
ClassLoaderloader=ClassLoaderTest.class.getClassLoader();
- while(loader!=null){
- System.out.println(loader.getClass().getName());
-
loaderloader=loader.getParent();
- }
- System.out.println(loader);
- }
- }
运行结果如下:
第一行结果表示:ClassLoaderTest的类加载器是AppClassLoader
第二行结果表示:AppClassLoader的类加载器是ExtClassLoder
第三行结果表示:null表示ExtClassLoader的类加载器是BootstrapClassLoader然后,我们可以将这个程序打成jar包ClassLoaderTest.jar放到JRE\lib\ext\目录下,然后重新运行这个程序.得到结果如下:
为什么出现不一样的结果呢?
由于Java类的加载满足双亲委派原则,当我加载ClassLoaderTest类的时候,先看当前类加载器是否已经加载过此类,如果没有,那么由如果上一级的类加载器去加载该类,如果能加载就直接返回.ExtClassLoader会自动加载JRE\lib\ext下面的所有jar包,所以当我们将ClassLoaderTest放到它下面后,程序运行时候利用父加载类ExtClassLoader去加载,就会发现com.classloader.test.ClassLoaderTest已经被加载,所以当前这个程序的运行只用到两个类加载器ExtClassLoader和BootStrap.用java–verbose:classcom.classloader.test.ClassLoaderTest可以更具体的看到运行的时候类加载过程,如下图:
分享到:
相关推荐
本文将深入浅出地探讨JVM ClassLoader的工作原理和相关知识点。 首先,ClassLoader可以分为三种基本类型:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。Bootstrap ClassLoader是JVM...
对于标题“Java SE: ClassLoader in depth”和描述中提到的“源码”、“工具”,实际上在给出的内容部分并没有任何与Java ClassLoader深入相关的技术信息。所提供的内容实际上是一份公司入职报到的指南,与Java编程...
【JVM运行机制详解】 Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行...在《深入JVM内核—原理、诊断与优化》视频教程中,会详细讲解这些内容,并结合实际案例进行演示和实践,帮助开发者成为JVM领域的专家。
深入理解ClassLoader的工作原理,对于优化JVM性能,解决类冲突问题,以及设计复杂的插件系统等都有极大的帮助。通过阅读和分析ClassLoader的源码,我们可以更好地理解JVM如何管理类的生命周期,并能够针对具体需求...
介绍JVM的基本知识和发展历史,并介绍了Java语言规范和JVM规范。 第二课 JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。...
理解ClassLoader的工作机制对于深入掌握Java应用程序的运行至关重要。这里我们将详细讨论ClassLoader的运行机制,特别是自定义ClassLoader的设计与实现。 ClassLoader的基本职责是根据类名动态加载对应的类文件。在...
### JVM基础知识详解 #### HotSpot简介 HotSpot作为Oracle(原属SUN)的主要Java虚拟机实现,自2006年起开源,并成为OpenJDK项目的核心组成部分。它主要使用C++编写,支持多种操作系统和硬件架构。HotSpot的一个...
Java的JVM(Java Virtual Machine)是Java程序运行的基础,它是一个虚拟的...掌握这些JVM相关知识点,不仅能够帮助Java开发者在面试中脱颖而出,也能在实际开发中更好地调试和优化应用程序,提高软件性能和稳定性。
本文将深入探讨JVM的主要知识点,包括内存模型、类加载机制、垃圾收集器及其算法、内存调优工具,以及相关配置选项。 1. **JVM内存模型** - **对象创建与内存分配**:JVM根据对象大小和生命周期将其分配到堆内存的...
《深入理解Java虚拟机》是Java开发者深入了解JVM(Java Virtual Machine)的必备书籍,尤其对于想要提升技术深度、优化程序性能的工程师来说,更是不可或缺的参考资料。这本书的第二版全面覆盖了JVM的最新发展,包括...
此外,该项目也可以作为教学和研究的案例,帮助更多的人掌握JVM的相关知识。 总之,"get-jvm"是一个宝贵的资源,它为开发者提供了深入研究JVM的实践环境,通过实际操作和测试,我们可以更全面地理解JVM的工作原理,...
总的来说,JVM原理、JVM调优、JVM内存模型和JAVA并发是Java程序员和系统管理员需要深入了解的知识点,因为它们直接影响到Java程序的性能和稳定性。了解这些知识点有助于开发者编写性能更优的代码,并在生产环境中对...
以下是对JVM与性能优化相关知识点的详细阐述: 1. **JVM内存模型** - **堆内存**:这是JVM中最大的一块内存,用于存储对象实例。堆被分为新生代和老年代,新生代又细分为Eden和两个Survivor空间。 - **栈内存**:...
在深入学习JVM的过程中,我们通常会关注以下几个核心知识点: 1. **内存模型**:JVM内存分为堆内存、栈内存、方法区、程序计数器和本地方法栈。堆内存存储对象实例,栈内存处理方法调用,方法区存储类信息,程序...
在Java虚拟机(JVM)中,类装载器(ClassLoader)是至关重要的组成部分,它负责查找和加载Java类到JVM内存中。本教程聚焦于深入理解JVM内核,特别是类装载器的原理、诊断与优化。在这个第六部分中,我们将探讨以下几...
### JVM必知必会知识点梳理 #### 1. JVM的定义与层次 Java虚拟机(JVM)具有多重含义: - **一套规范**:即Java虚拟机规范,定义了Java虚拟机应该具有的行为。 - **一种实现**:例如HotSpot、J9、JRockit,它们都是...
【狂神说JVM探究】是一份集合了...这些知识点覆盖了JVM的基础到进阶内容,适合初学者和有一定经验的开发者深入理解Java运行机制。通过学习这份资料,读者可以系统地掌握JVM的工作原理,并提升Java应用的性能优化能力。
下面,我们将深入探讨Java与JVM的相关知识点。 1. **类加载机制**:JVM通过类加载器(ClassLoader)将字节码文件(.class)转换成运行时的类。类加载分为加载、验证、准备、解析和初始化五个阶段,每个阶段都有其...
### JVM详解核心知识点 #### 一、Java与JVM概览 **1.1 Java定义** Java是一种广泛使用的面向对象的编程语言,以其强大的跨平台兼容性和安全性著称。Java程序能够运行在任何安装了Java运行环境(JRE)的设备上,这...