一文读懂Jvm类加载机制
在了解Jvm类加载机制之前,我们需要先了解一些基本的概念。
什么是Jvm?
Jvm全称为Java Virtual Machine(Java虚拟机),它是Java语言的一个运行环境,它可以在任何平台上运行,如Windows、Linux、MacOS等,具有自动内存管理和垃圾回收等功能。
什么是类加载机制?
类加载机制是Jvm的重要组成部分,它是指Jvm在运行时将类的字节码加载到内存中,并将其转换为Java对象的过程。类加载机制是Jvm实现Java语言跨平台特性的重要保障。
Jvm的类加载机制主要包括了以下几个阶段:
加载阶段
在加载阶段,Jvm通过ClassLoader将.class文件中的类字节码加载入内存中,这些.class文件可以是从本地的文件系统、网络中或者从其他jar文件中读取。加载阶段的目的是在内存中创建一个类的Class对象,并且在这个过程中进行了字节码验证,以确保被加载的类符合Java语言规范。
链接阶段
链接阶段可以分为三个小阶段:验证、准备和解析。
验证
验证阶段的作用是验证类的字节码符合Jvm规范,符合Java语言规范。
准备
准备阶段的作用是为类的静态成员变量分配内存,并设置默认初始值。在这一步中,Jvm并没有进行静态变量的初始化。
解析
解析阶段的作用是将类中的符号引用转换为直接引用。
初始化阶段
在初始化阶段,静态变量和静态代码块被执行,JVM才把类的状态改为“初始化”。
类加载器
在Jvm中,有三类类加载器:Bootstrap ClassLoader、Extension ClassLoader 和 Application ClassLoader。
Bootstrap ClassLoader
Bootstrap ClassLoader 是Jvm内置的、最高级别的类加载器,它用于加载Java的核心类库,如java.、javax.等,位于jre/lib/rt.jar。
Extension ClassLoader
Extension ClassLoader 用于加载Java扩展库,位于jre/lib/ext目录下。
Application ClassLoader
最后是Application ClassLoader,也称为System ClassLoader,ClassLoader的默认实现,用于加载应用程序的classpath目录下的类文件。
示例说明
这里我们用两个例子来说明类加载机制的执行过程。
示例1
我们定义了一个类:
public class Hello {
static {
System.out.println("Hello World!");
}
}
在编译之后,我们用如下命令运行:
java Hello
输出如下:
Hello World!
这是因为,当我们运行一个类时,Jvm会先将其加载进内存中(加载阶段),然后执行其静态代码块,输出结果。
示例2
我们定义了一个类:
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
在编译之后,我们用如下命令运行:
java Main
输出如下:
Hello World!
这是因为,当我们运行一个Java程序时,Jvm会先查找指定的类(Main),然后加载到内存中(加载阶段),执行其main方法(初始化阶段)。
总结
类加载机制是Java语言跨平台特性的关键,了解Jvm类加载机制的执行过程,可以更好地理解Java程序的运行机制,这对于程序员来说至关重要。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文读懂Jvm类加载机制 - Python技术站