JVM 内存分析 - guguoyi/WorkLine GitHub Wiki

  • java 虚拟机运行时数据区域:

    1. 方法区 2. 虚拟机栈/本地方法栈 3.堆 4.程序计数器
    • 程序计数器 该区域内存线程私有,是唯一一个不会有OOM的区域。

    • java虚拟机栈

      1. 该区域也是线程私有的, 生命周期和线程的生命周期一样, 每个方法在执行的时候都会创建一个栈桢,由于存储局部变量表,动态链接,操作数栈,返回值类型等信息.
      2. 该区域可能存在两种异常:
        1. 执行的栈深度大于虚拟机允许的栈深度 (StackOutOfOverFlow)
        2. 在支持动态扩展的情况下,虚拟机无法为栈桢申请到足够的空间 (OOM)
    • java 堆 线程共享,所有的实例对象和数组都在堆上分配。〈br/〉 细分:1. Young 区 2. old 区 3. Eden 空间 4. From Survivor空间 5. To Survivor空间 6. 线程私有的TLAB

    • 方法区 线程共享,存储类信息,常量,静态变量,即时编译器编译之后的代码.
      运行时常量池也是方法区的一部分, Class文件中的常量池存储字面量和符号引用,类加载完成后这部分内容将会移动到运行时常量池存储.

⚠️ **GitHub.com Fallback** ⚠️