虚拟机概述
VM(Virtual Machine) 是一款虚拟的计算机,是一款用来执行一系列的计算机指令的软件。大体上可分为程序虚拟机和系统虚拟机。
系统虚拟机是对物理计算机的完全仿真,可以提供完整可运行操作系统的软件平台,著名的VMware就是系统虚拟机。
程序虚拟机,JVM就是一款程序虚拟机,专门为执行某个计算机程序而设计,在Java虚拟机中执行的指令我们称之为java字节码指令。
JVM作用
1、将字节码文件加载到内存中(运行时数据区)并保存
2、将字节码文件编译成为可执行文件并执行
3、垃圾回收
JVM组成部分
1、类加载器
2、运行时数据区(堆、方法区、本地方法栈、虚拟机栈、程序计数器)
3、本地方法接口
4、垃圾回收器
JVM 类加载器
类加载子系统
类加载子系统是Java虚拟机(JVM)的一部分,负责加载、连接和初始化Java类。它是Java程序运行的基础,确保在需要使用类时能够正确加载并执行。
类加载子系统具有以下特点:
委托模型:类加载子系统采用了双亲委派模型,即当一个类加载器接收到类加载请求时,它会先将加载请求委派给父加载器处理,只有在父加载器无法找到类时,才会尝试自己加载。
缓存机制:类加载子系统会缓存已加载的类,避免重复加载相同的类,提高性能和节省内存。
动态加载:除了初始加载外,类加载子系统还支持动态加载类。通过使用反射、类加载器等机制,可以在运行时动态地加载和使用类。
类加载过程
加载-->验证-->准备-->解析-->初始化-->使用-->销毁
加载
1、将字节码文件的二进制数据加载到内存中。
2、生成代表该类的Class对象。
链接
验证:验证字节码文件的格式和语义是否符合虚拟机的规范。
准备:为静态变量分配内存空间,并赋予初始值(此处为类型的默认值,如int默认值为0)。
解析:将类的符号引用转化为直接引用,使得各个类之间能够正确地相互引用。
初始化
初始化阶段是类加载的最后一步,负责执行类的初始化代码,包括静态变量赋值和静态代码块的执行。它在类首次被使用时触发,或者通过调用 Class.forName() 等方法显式初始化。