JVM的类加载器

简介: JVM的类加载器

JVM的类加载器是负责将类的字节码加载到JVM中的组件。它的主要功能是根据类的全限定名,从文件系统、网络、ZIP包等位置加载字节码,并将其转换为JVM内部的Class对象。

类加载器有以下三种类型:

1.     引导类加载器(Bootstrap Class Loader):引导类加载器是JVM内置的类加载器,它负责加载Java核心库(如java.lang包中的类)。引导类加载器是JVM的一部分,由C++实现,并不是一个普通的Java对象。

2.     扩展类加载器(Extension Class Loader):扩展类加载器负责加载Java扩展库(如javax包中的类),位于sun.misc.Launcher$ExtClassLoader类中。

3.     应用程序类加载器(Application Class Loader):应用程序类加载器也称为系统类加载器,负责加载应用程序类路径(Classpath)上指定的类。它是ClassLoader类的子类,位于sun.misc.Launcher$AppClassLoader类中。

除了上述三种核心类加载器,还可以根据需要创建自定义的类加载器。自定义类加载器可以继承ClassLoader类,重写父类的方法来实现特定的类加载需求,例如从非标准位置加载类文件、加载加密的类文件等。

类加载器采用双亲委派模型(Parent Delegation Model)来保证类的隔离性和安全性。即当一个类加载器收到类的加载请求时,它会先查询父加载器是否已经加载了该类,如果父加载器能够加载,则将加载过程委派给父加载器进行处理,只有在父加载器无法加载时,才由当前加载器自己来加载。这样可以确保类的一致性,并防止同名类的冲突。

 

类加载器的执行流程:

  1. 加载(Loading):类加载器负责查找、读取并加载类的字节码文件到内存中。加载过程是通过类的全限定名(Fully Qualified Name)来定位并读取对应的字节码文件。
  2. 链接(Linking):链接是指将已加载的类与其他类或符号进行关联的过程。链接包括三个阶段:
  • 验证(Verification):验证确保被加载的类的字节码符合Java语言规范和安全约束,防止恶意代码的执行。
  • 准备(Preparation):准备阶段为类的静态变量分配内存空间,并设置默认初始值。
  • 解析(Resolution):解析阶段将类或接口的符号引用替换为直接引用,以便于在运行时进行访问。
  1. 初始化(Initialization):初始化是类加载的最后一个阶段,它负责执行类的静态初始化代码块(static块)和静态变量的赋值操作。在该阶段,JVM会保证一个类的初始化操作只会执行一次,确保类的静态状态的正确性。

 

相关文章
|
26天前
|
安全 前端开发 Java
【JVM的秘密揭秘】深入理解类加载器与双亲委派机制的奥秘!
【8月更文挑战第25天】在Java技术栈中,深入理解JVM类加载机制及其双亲委派模型是至关重要的。JVM类加载器作为运行时系统的关键组件,负责将字节码文件加载至内存并转换为可执行的数据结构。其采用层级结构,包括引导、扩展、应用及用户自定义类加载器,通过双亲委派机制协同工作,确保Java核心库的安全性与稳定性。本文通过解析类加载器的分类、双亲委派机制原理及示例代码,帮助读者全面掌握这一核心概念,为开发更安全高效的Java应用程序奠定基础。
70 0
|
1天前
|
安全 Java 应用服务中间件
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
什么是类加载器,类加载器有哪些;什么是双亲委派模型,JVM为什么采用双亲委派机制,打破双亲委派机制;类装载的执行过程
JVM常见面试题(三):类加载器,双亲委派模型,类装载的执行过程
|
1天前
|
Arthas Java 测试技术
JVM —— 类加载器的分类,双亲委派机制
类加载器的分类,双亲委派机制:启动类加载器、扩展类加载器、应用程序类加载器、自定义类加载器;JDK8及之前的版本,JDK9之后的版本;什么是双亲委派模型,双亲委派模型的作用,如何打破双亲委派机制
JVM —— 类加载器的分类,双亲委派机制
|
4月前
|
前端开发 安全 Java
深入浅出JVM(八)之类加载器
深入浅出JVM(八)之类加载器
|
20天前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
35 0
|
20天前
|
开发者 C# Windows
WPF布局大揭秘:掌握布局技巧,轻松创建响应式用户界面,让你的应用程序更上一层楼!
【8月更文挑战第31天】在现代软件开发中,响应式用户界面至关重要。WPF(Windows Presentation Foundation)作为.NET框架的一部分,提供了丰富的布局控件和机制,便于创建可自动调整的UI。本文介绍WPF布局的基础概念与实现方法,包括`StackPanel`、`DockPanel`、`Grid`等控件的使用,并通过示例代码展示如何构建响应式布局。了解这些技巧有助于开发者优化用户体验,适应不同设备和屏幕尺寸。
15 0
|
26天前
|
安全 前端开发 Java
【JVM 探秘】ClassLoader 类加载器:揭秘 Java 类加载机制背后的秘密武器!
【8月更文挑战第25天】本文全面介绍了Java虚拟机(JVM)中的类加载器,它是JVM的核心组件之一,负责将Java类加载到运行环境中。文章首先概述了类加载器的基本工作原理及其遵循的双亲委派模型,确保了核心类库的安全与稳定。接着详细阐述了启动、扩展和应用三种主要类加载器的层次结构。并通过一个自定义类加载器的例子展示了如何从特定目录加载类。此外,还介绍了类加载器的完整生命周期,包括加载、链接和初始化三个阶段。最后强调了类加载器在版本隔离、安全性和灵活性方面的重要作用。深入理解类加载器对于掌握JVM内部机制至关重要。
41 0
|
2月前
|
存储 前端开发 Java
(二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器
上篇《初识Java虚拟机》文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再交由执行引擎执行。本文中则会对Java虚拟机的类加载机制以及执行引擎进行全面分析。
|
3月前
|
安全 前端开发 Java
《JVM由浅入深学习【一】 》JVM由简入深学习提升(类加载过程+父子类加载过程+类加载器+双亲委派机制)
《JVM由浅入深学习【一】 》JVM由简入深学习提升(类加载过程+父子类加载过程+类加载器+双亲委派机制)
30 0
|
4月前
|
监控 安全 Java
JVM工作原理与实战(九):类加载器-启动类加载器
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了启动类加载器、通过启动类加载器去加载用户jar包等内容。
68 8