大数跨境

JVM 专题 01|Java 内存装了啥?堆/栈/元空间讲清

JVM 专题 01|Java 内存装了啥?堆/栈/元空间讲清 种子AI编程学习
2026-10-19
2
导读:JVM 内存分线程私有和线程共享两大部分。
JVM 把内存切成几块,各装各的。面试常问:对象在哪?类在哪?

一、整体划分

JVM 内存分线程私有和线程共享两大部分。

二、线程私有

  • 程序计数器
    :当前线程执行到哪条指令,极小。
  • 虚拟机栈
    :每个方法调用一个栈帧,装局部变量、操作数栈。递归太深 → StackOverflowError。
  • 本地方法栈
    :Native 方法用的,类似虚拟机栈。

三、线程共享

  • 堆(Heap)
    :对象实例和数组都在这,GC 主战场。分新生代(Eden + 两个 Survivor)和老年代。
  • 方法区 / 元空间(Metaspace)
    :存类信息、常量、静态变量、方法字节码。JDK8 起用本地内存的元空间,取代永久代,不易 OOM。

四、一个对象的一生

new 出来的对象先放 Eden;GC 后活的进 Survivor,熬过几轮进老年代。大对象直接进老年代。

五、面试速记

  1. 栈(线程私有)装方法调用和局部变量;堆(共享)装对象。
  2. 堆分新生代 + 老年代。
  3. 元空间(JDK8)装类信息,取代永久代。
  4. 递归深 → 栈溢出;对象多 → 堆溢出。
  5. 字符串常量池 JDK7 后也在堆里。

六、一句话带走

栈装"怎么执行"(方法/局部变量),堆装"对象",元空间装"类"。记住对象在堆、类在元空间、变量在栈,内存模型就通了。

JVM面试

更多 Java 面试速通,关注公众号持续更新。


【声明】内容源于网络
0
0
种子AI编程学习
1234
内容 59
粉丝 0
种子AI编程学习 1234
总阅读32
粉丝0
内容59