返回
jvm类加载器就做了一件事-1
后端
2023-10-13 22:31:17
引言
作为java开发人员,我们都知道java是一门跨平台的语言,那java代码是如何跨平台的呢?其实答案就在java虚拟机(JVM)上。java虚拟机将java代码编译成字节码(一种平台无关的指令集),然后由类加载器加载字节码并转换成可执行的机器码,最后JVM解释执行这些机器码。在java代码执行的整个过程中,类加载器扮演着重要的角色,它决定了哪些类会被加载、什么时候被加载,以及如何被加载。
JVM类加载器概览
类加载器是一个将类从磁盘加载到JVM的方法。它将字节码加载到JVM中并将其转换成机器码,从而使得类可以被执行。在JVM中,有三种类型的类加载器:
- 启动类加载器(Bootstrap ClassLoader):这是JVM的根类加载器,它负责加载Java的核心库,如
java.lang
包和java.util
包。 - 扩展类加载器(Extension ClassLoader):它负责加载Java扩展库,如
java.sql
包和javax.xml
包。 - 系统类加载器(System ClassLoader):它负责加载用户定义的类,如我们自己编写的java类。
JVM类加载过程
类加载过程是一个相对复杂的过程,它涉及到多个步骤。下面我们将详细介绍一下类加载的过程:
- 类查找:当JVM需要加载一个类时,它首先会查找该类是否已经被加载过。如果该类已经被加载过,那么JVM会直接返回该类的引用。否则,JVM会继续进行后续的步骤。
- 类加载:如果类没有被加载过,那么JVM会根据类的全限定名来查找该类的字节码文件。字节码文件通常存储在
.class
文件中。JVM找到字节码文件后,会将其加载到JVM中。 - 类验证:在类加载完成后,JVM会对类进行验证。类验证主要包括以下几个步骤:
- 文件格式验证:JVM会检查类文件是否符合Java虚拟机的规范。
- 字节码验证:JVM会检查类文件中的字节码指令是否合法。
- 符号引用验证:JVM会检查类文件中的符号引用是否指向已加载的类。
- 类准备:在类验证通过后,JVM会为类分配内存并初始化类的静态变量。
- 类解析:在类准备完成后,JVM会解析类文件中的符号引用。符号引用是指对其他类的引用,如继承、实现或方法调用。
- 类初始化:在类解析完成后,JVM会对类进行初始化。类初始化主要包括以下几个步骤:
- 执行类的静态代码块:静态代码块是类加载时自动执行的代码块,它通常用于初始化类的静态变量。
- 调用类的构造方法:JVM会调用类的构造方法来初始化类的实例变量。
结语
类加载器是JVM的核心组件之一,它负责将类加载到JVM中并将其转换成可执行的机器码。类加载过程是一个相对复杂的过程,它涉及到多个步骤。掌握类加载的过程对于理解Java代码是如何执行的非常重要。