类的加载机制是怎么样的?下面我们分几个部分来讲解
1,这些概念你知道是什么意思吗?
相信你应该听过不少这样的词语,
类加载机制,双亲委托机制,BootstrapClassLoader、ExtClassLoader、AppClassLoader
如果你不清楚,这些都是什么意思?没关系,看完下面的内容,你就清楚了
2,什么是类的加载机制?
所谓类的加载机制是指JVM将java类加载到内存的过程。
我们知道,JVM使用Java类的流程如下:
1,首先,Java源文件----编译---->class文件
2,其次,类加载器ClassLoader会读取这个.class文件,并将其转化为java.lang.Class的实例。有了该实例,JVM就可以使用他来创建对象,调用方法等操作了。
那么ClassLoader是以一种什么机制来加载Class的?
具体,分为下面两个方面来考虑
1,这些class文件的来源都有哪些?
2,谁来加载这些class
3,Class文件的来源都有哪些?
1,Java内部自带的核心类,位于$JAVA_HOME/jre/lib
2,Java的扩展类,位于$JAVA_HOME/jre/lib/ext目录下
3,我们自己开发的类或项目开发用到的第三方jar包,位于我们项目的目录下,比如WEB-INF/lib目录
4,谁来加载这些Class?
针对不同的来源,Java分了不同的ClassLoader来加载
1,Java核心类,这些是Java运行的基础类,由一个名为BootstrapClassLoader加载器负责加载。
这个类加载器被称为“根加载器或引导加载器”。
注意:BootstrapClassLoader不继承ClassLoader,是由JVM内部实现。
2,Java扩展类,是由ExtClassLoader负责加载,被称为“扩展类加载器”。
3,项目中编写的类,是由AppClassLoader来负责加载,被称为“系统类加载器”。
那么问题来了,String这个常用类,应该是由哪个类加载器来加载?
你可能会说,这还不简单,String属于核心类,所以由BootstrapClassLoader加载,但这个答案的前提是,我们知道String属于核心类,而作为JVM的加载机制,它是怎么去做到的?所以,我们推出了一个关键点:双亲委托机制
5,双亲委托机制
就是加载一个类,会先获取到一个系统类加载器AppClassLoader的实例,然后往上层层请求,先由BootstarpClassLoader去加载,如果BootStrapClassLoader发现没有,再下发给ExtClassLoader去加载,还是没有,才由AppClassLoader去加载。
总体来说,就是由上层类加载器优先加载,不存在,再由下层类加载器加载,这也是一种安全的考虑。
6,程序验证
案例1:创建一个自己的类,然后打印其类加载器
publicclass ClassLoaderTest {
publicstaticvoid main(String[] args) throws ClassNotFoundException {
Class<?> clazz = Class.forName("com.qianfeng.thread.client.Programmer");
ClassLoader classLoader = clazz.getClassLoader();
System.out.println(classLoader.getClass().getSimpleName());
}
}
案例2:打印其双亲类加载器信息
while(classLoader.getParent() != null){
classLoader = classLoader.getParent();
System.out.println("-->"+classLoader.getClass().getSimpleName());
}
--------------------- 本文来自 互联网十年老兵- 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/happy_coding_life/article/details/80381245?utm_source=copy
相关推荐
"Java面试题-内存+GC+类加载器+JVM调优" ...本文对 Java 面试题中的内存、GC、类加载器和 JVM 调优进行了详细的解释和分析。通过了解这些知识点,可以帮助开发者更好地掌握 Java 技术,并提高 Java 应用程序的性能。
2. **类加载器及类加载器的委托机制**:JVM中有三种内置的类加载器,分别是启动类加载器、扩展类加载器和应用类加载器。此外,还可以自定义类加载器。类加载器之间遵循委托机制,即下级类加载器先请求上级类加载器...
2. 高频面试题-JVM-3876439997404198.md
### 2024年Java面试题:JVM之Java虚拟机面试题 #### Java内存模型及基础知识 **1. Java代码如何被计算机识别** Java程序最初由开发人员使用Java语法编写,这些代码人类可读但计算机无法直接理解。为了使计算机...
JVM 的运行机制 多线程 JVM 的内存区域 JVM 会创建操作系统的接口创建一个原生线程。JVM 线程和操作系统线程是一一对应的
JavaSE常见面试题-高级反射-JVM篇 本文档涵盖了JavaSE中高级反射和JVM相关的知识点,包括Java中的反射机制、动态代理、设计模式、回收机制、JDK7和JDK8的区别、Jvm虚拟机原理等。 一、 Java中的反射机制 Java中的...
### 2024年Java面试题:JVM性能调优面试题第二部分 #### 内存模型及分区 在Java虚拟机(JVM)中,内存主要被划分为以下几个区域: 1. **堆区(Heap)**:堆区是用于存储初始化的对象、成员变量等数据的地方。所有对象...
把原来的swt.jar替换成这个就能解决 Cannot load 32-bit SWT libraries on 64-bit JVM问题
《JAVA-JVM-01类加载机制》 Java虚拟机(JVM)是Java程序运行的基础,其中类加载机制是其核心组成部分。本文将深入剖析Java中的类加载器和双亲委派机制,并通过示例讲解如何自定义类加载器。 类加载过程是Java程序...
JVM面试真题 JVM面试真题 JVM面试真题
总结,JVM 类加载机制是Java平台的核心特性之一,它确保了程序的稳定运行和动态扩展能力。理解类加载器的工作原理和双亲委派模型对于优化程序性能、解决类冲突以及构建复杂的模块化系统至关重要。在实际开发中,掌握...
这些只是JVM面试题的一部分,实际面试中可能会涉及更深入的问题,如JVM内存模型的细节、JIT编译器、内存溢出问题的处理等。通过深入学习和实践,开发者可以更好地理解和优化JVM,提升Java应用的性能和稳定性。
Java 虚拟机(JVM)面试题-重点 Java 虚拟机(JVM)是 Java 语言的核心组件之一,它提供了一个运行 Java ByteCode 的环境,负责将 Java 代码转换成机器代码,供 CPU 执行。下面是 JVM 的主要组成部分及其作用: ##...
【JVM面试题详解】 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行Java应用程序并提供跨平台的兼容性。对于Java开发者来说,深入理解JVM的工作原理是面试中不可或缺的一部分。以下是一些关于JVM的常见面试...
在Java开发中,JVM(Java虚拟机)的类加载机制是至关重要的,因为它负责将类的字节码转换为运行时的实例。本专题"性能调优专题-jvm类加载机制-performance-jvmclassloader"深入探讨了如何通过理解并优化类加载过程来...
大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-1.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-2.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的...
大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-1.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-2.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的...
大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-1.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-2.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的...
JAVA-JVM-面试题,java面试题
大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-1.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM面试题-3.mp4 大厂面试题第一季-阿里篇-004-阿里面试被虐记,90%被问到的JVM...