JVM 概述
JVM 内存模型
程序计数器
是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。
每个线程都有一个独立的程序计数器,用于线程切换后能恢复到正确的执行位置。
虚拟机栈
- 每个线程都有自己的虚拟机栈,用于存储方法的局部变量表、操作数栈、动态链接、方法出口等信息。
- 当线程调用一个方法时,会为该方法创建一个栈帧并压入虚拟机栈;方法执行完毕后,栈帧出栈。
本地方法栈
- 与虚拟机栈的作用类似,只不过本地方法栈是为执行 Native 方法服务的。
- 用于存储本地方法(使用 JNI 编写的方法)的调用信息。
堆
- 被所有线程共享的一块内存区域,用于存放对象实例和数组。
- 是垃圾收集器管理的主要区域。
方法区
- 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
- 在 Java 8 之后,方法区被元空间(Metaspace)替代。
运行时常量池
- 是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。