jvm内存区域生命周期分线程共享与私有:堆和方法区随jvm启停而创建销毁;虚拟机栈、本地方法栈、程序计数器则与线程同生共死;tlab不改变堆生命周期;类卸载仅清理元数据,方法区本身持续存在。

JVM 内存区域的生命周期取决于其设计目的和线程模型,不是所有区域都随 JVM 启动而存在,也不是全部等到 JVM 退出才销毁。
线程共享区域:随 JVM 实例启停
堆(Heap)和方法区(Method Area,JDK 8+ 为元空间 Metaspace)是所有线程共享的区域,它们在 JVM 进程启动时创建,伴随整个 JVM 生命周期,直到 JVM 正常退出或崩溃时才释放。
- 堆用于存放对象实例和数组,只要 JVM 在运行,新对象就持续分配,GC 也持续工作
- 方法区存储类结构、静态变量、常量池等;元空间从本地内存分配,不受 -XX:MaxMetaspaceSize 限制时可动态扩容,但仍在 JVM 存续期内管理
线程私有区域:与线程同生共死
虚拟机栈(Java Virtual Machine Stack)、本地方法栈(Native Method Stack)和程序计数器(PC Register)每个线程一份,生命周期严格绑定线程。
- 线程启动时,JVM 为其分配对应栈空间和 PC 寄存器
- 线程执行结束(自然终止或被 interrupt),这些区域自动销毁,不参与 GC
- 栈帧随方法调用入栈、返回出栈,但整块栈内存由线程生命周期统一管理
特殊说明:TLAB 不改变堆整体生命周期
虽然堆中存在线程本地分配缓冲区(TLAB),用于提升对象分配效率,但它只是堆内的一段逻辑划分,并非独立内存区域。TLAB 的分配和回收仍由堆统一管理,不影响堆本身的生命周期。
方法区/元空间的卸载时机更精细
类的卸载发生在满足三个条件时:该类所有实例已回收、加载它的 ClassLoader 已被回收、Class 对象无任何引用。此时,对应类的元数据才会从方法区卸载——但这只是局部清理,方法区本身仍持续存在。











