1、JVM是Java Virtual Machine的缩写,即Java虚拟机,它是Java程序运行的基础,能在不同操作系统上提供统一的运行环境。
2、JVM就像是一个虚拟的计算机,它有自己的指令集、内存管理系统和运行时数据区。
3、它负责加载字节码文件,并将其解释或编译成本地机器码来执行。
4、JVM的存在使得Java程序具有跨平台性,一次编写可以在多个系统上运行。
5、运行时数据区包括程序计数器、虚拟机栈、本地方法栈、堆和方法区等部分。
6、程序计数器记录着当前线程执行的字节码指令地址。
7、虚拟机栈存放着局部变量表、操作数栈等线程运行时的数据。
8、本地方法栈用于执行本地方法。
9、堆是对象实例存储的地方,是垃圾回收的主要区域。
10、方法区存储类信息、常量、静态变量等。
11、JVM的垃圾回收机制能自动回收不再使用的对象内存,提高内存利用率。
12、常见的垃圾回收算法有标记清除算法、标记整理算法、复制算法等。
13、标记清除算法先标记出可回收对象,然后统一清除。
14、标记整理算法在标记后将存活对象移动到一端,然后清除边界以外的内存。
15、复制算法将内存分为两块,每次只使用一块,将存活对象复制到另一块。
16、JVM的类加载机制负责加载.class文件,包括加载、验证、准备、解析和初始化五个阶段。
17、加载阶段将字节码文件读入内存,并创建对应的Class对象。
18、验证阶段确保字节码文件的正确性和安全性。
19、准备阶段为类的静态变量分配内存并设置初始值。
20、解析阶段将符号引用转换为直接引用。
21、初始化阶段执行类的静态代码块和为静态变量赋值。
22、JIT(Just-In-Time)编译器能将热点代码编译成本地机器码,提高执行效率。
23、它会在运行时监测哪些代码被频繁执行,然后将其编译优化。
24、JVM的内存模型定义了多线程之间如何共享内存和进行同步。
25、它通过锁、volatile关键字等机制来保证线程安全。
26、锁可以分为偏向锁、轻量级锁和重量级锁。
27、偏向锁适用于只有一个线程访问同步块的情况。
28、轻量级锁在竞争不激烈时使用,通过CAS操作来避免线程阻塞。
29、重量级锁在竞争激烈时使用,会导致线程阻塞和上下文切换。
30、volatile关键字能保证变量的可见性,即一个变量被声明为volatile后,它会保证对该变量的写操作会立即刷新到主内存中,而读操作会从主内存中读取最新的值。
31、JVM的调优可以通过调整堆大小、垃圾回收器参数等方式来提高性能。
32、增大堆大小可以减少垃圾回收频率,但也可能导致内存溢出。
33、选择合适的垃圾回收器可以根据应用场景来优化垃圾回收性能。
34、对于新生代对象较多的应用,可以选择适合新生代回收的垃圾回收器。