Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,提供了一个平台无关的运行环境。本篇JVM学习笔记主要涵盖了以下几个核心知识点:
1. **运行时数据区**:
- **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。
- **Java虚拟机栈**:每个方法执行时创建的栈帧,存储局部变量、操作数栈、动态链接和方法出口等信息,线程私有,随方法调用和结束而生灭。
- **本地方法栈**:类似虚拟机栈,但服务于Native方法,线程私有。
- **Java堆**:所有线程共享,主要存储对象实例,垃圾收集器主要管理的区域。
- **方法区**:存储类信息、常量、静态变量和编译后的代码,包含运行时常量池。
2. **类加载机制**:
- 类的生命周期包括加载、验证、准备、解析、初始化、使用和卸载七阶段。
- JVM在四种情况下强制初始化类:new实例、访问静态字段(非final常量)、调用静态方法、虚拟机启动时指定的主类。
3. **加载**:
- 获取类的二进制字节流,将其转换为方法区的运行时数据结构,创建Class对象。
4. **验证**:
- 文件格式、元数据、字节码和符号引用验证,确保字节流安全、合法。
5. **准备**:
- 为类变量分配内存并设置初始值(零值),不包括实例变量。
6. **解析**:
- 符号引用替换为直接引用,便于直接访问目标。
7. **初始化**:
- 执行类构造器<clinit>()方法,根据源文件中出现的顺序执行类变量赋值和静态语句块。
这些知识点构成了JVM的基础,理解它们对于优化Java程序性能、调试和解决内存问题至关重要。在实际开发中,理解JVM的工作原理有助于写出更高效、更稳定的代码。