JAVA面试-JVM篇 03-JVM运行时数据区哪些是线程私有的哪些是共享的
文章概述
JVM运行时数据区是Java程序运行时的内存划分方案,理解哪些区域是线程私有的、哪些是共享的,是JVM调优和故障排查的基础。本文用一张总图、两张分类流程图和一张对比表格,帮你一次性理清。
一、整体架构一览
#mermaid-svg-NgA7I8EL2VrfEKdv{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-NgA7I8EL2VrfEKdv .error-icon{fill:#552222;}#mermaid-svg-NgA7I8EL2VrfEKdv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-NgA7I8EL2VrfEKdv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-NgA7I8EL2VrfEKdv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-NgA7I8EL2VrfEKdv .marker.cross{stroke:#333333;}#mermaid-svg-NgA7I8EL2VrfEKdv svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-NgA7I8EL2VrfEKdv p{margin:0;}#mermaid-svg-NgA7I8EL2VrfEKdv .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-NgA7I8EL2VrfEKdv .cluster-label text{fill:#333;}#mermaid-svg-NgA7I8EL2VrfEKdv .cluster-label span{color:#333;}#mermaid-svg-NgA7I8EL2VrfEKdv .cluster-label span p{background-color:transparent;}#mermaid-svg-NgA7I8EL2VrfEKdv .label text,#mermaid-svg-NgA7I8EL2VrfEKdv span{fill:#333;color:#333;}#mermaid-svg-NgA7I8EL2VrfEKdv .node rect,#mermaid-svg-NgA7I8EL2VrfEKdv .node circle,#mermaid-svg-NgA7I8EL2VrfEKdv .node ellipse,#mermaid-svg-NgA7I8EL2VrfEKdv .node polygon,#mermaid-svg-NgA7I8EL2VrfEKdv .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-NgA7I8EL2VrfEKdv .rough-node .label text,#mermaid-svg-NgA7I8EL2VrfEKdv .node .label text,#mermaid-svg-NgA7I8EL2VrfEKdv .image-shape .label,#mermaid-svg-NgA7I8EL2VrfEKdv .icon-shape .label{text-anchor:middle;}#mermaid-svg-NgA7I8EL2VrfEKdv .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-NgA7I8EL2VrfEKdv .rough-node .label,#mermaid-svg-NgA7I8EL2VrfEKdv .node .label,#mermaid-svg-NgA7I8EL2VrfEKdv .image-shape .label,#mermaid-svg-NgA7I8EL2VrfEKdv .icon-shape .label{text-align:center;}#mermaid-svg-NgA7I8EL2VrfEKdv .node.clickable{cursor:pointer;}#mermaid-svg-NgA7I8EL2VrfEKdv .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-NgA7I8EL2VrfEKdv .arrowheadPath{fill:#333333;}#mermaid-svg-NgA7I8EL2VrfEKdv .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-NgA7I8EL2VrfEKdv .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-NgA7I8EL2VrfEKdv .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NgA7I8EL2VrfEKdv .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-NgA7I8EL2VrfEKdv .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NgA7I8EL2VrfEKdv .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-NgA7I8EL2VrfEKdv .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-NgA7I8EL2VrfEKdv .cluster text{fill:#333;}#mermaid-svg-NgA7I8EL2VrfEKdv .cluster span{color:#333;}#mermaid-svg-NgA7I8EL2VrfEKdv div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-NgA7I8EL2VrfEKdv .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-NgA7I8EL2VrfEKdv rect.text{fill:none;stroke-width:0;}#mermaid-svg-NgA7I8EL2VrfEKdv .icon-shape,#mermaid-svg-NgA7I8EL2VrfEKdv .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-NgA7I8EL2VrfEKdv .icon-shape p,#mermaid-svg-NgA7I8EL2VrfEKdv .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-NgA7I8EL2VrfEKdv .icon-shape .label rect,#mermaid-svg-NgA7I8EL2VrfEKdv .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-NgA7I8EL2VrfEKdv .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-NgA7I8EL2VrfEKdv .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-NgA7I8EL2VrfEKdv :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 线程共享
线程私有
程序计数器
Java虚拟机栈
本地方法栈
堆
方法区/元空间
线程1
线程2
...
所有线程共享
口诀:两栈一计数器私有,堆与方法区共享。
二、线程私有的三个区域
每个线程启动时都会独立创建一份,互不干扰。
#mermaid-svg-E3Yb3F6icoJDVI2y{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-E3Yb3F6icoJDVI2y .error-icon{fill:#552222;}#mermaid-svg-E3Yb3F6icoJDVI2y .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-E3Yb3F6icoJDVI2y .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-E3Yb3F6icoJDVI2y .marker{fill:#333333;stroke:#333333;}#mermaid-svg-E3Yb3F6icoJDVI2y .marker.cross{stroke:#333333;}#mermaid-svg-E3Yb3F6icoJDVI2y svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-E3Yb3F6icoJDVI2y p{margin:0;}#mermaid-svg-E3Yb3F6icoJDVI2y .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-E3Yb3F6icoJDVI2y .cluster-label text{fill:#333;}#mermaid-svg-E3Yb3F6icoJDVI2y .cluster-label span{color:#333;}#mermaid-svg-E3Yb3F6icoJDVI2y .cluster-label span p{background-color:transparent;}#mermaid-svg-E3Yb3F6icoJDVI2y .label text,#mermaid-svg-E3Yb3F6icoJDVI2y span{fill:#333;color:#333;}#mermaid-svg-E3Yb3F6icoJDVI2y .node rect,#mermaid-svg-E3Yb3F6icoJDVI2y .node circle,#mermaid-svg-E3Yb3F6icoJDVI2y .node ellipse,#mermaid-svg-E3Yb3F6icoJDVI2y .node polygon,#mermaid-svg-E3Yb3F6icoJDVI2y .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-E3Yb3F6icoJDVI2y .rough-node .label text,#mermaid-svg-E3Yb3F6icoJDVI2y .node .label text,#mermaid-svg-E3Yb3F6icoJDVI2y .image-shape .label,#mermaid-svg-E3Yb3F6icoJDVI2y .icon-shape .label{text-anchor:middle;}#mermaid-svg-E3Yb3F6icoJDVI2y .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-E3Yb3F6icoJDVI2y .rough-node .label,#mermaid-svg-E3Yb3F6icoJDVI2y .node .label,#mermaid-svg-E3Yb3F6icoJDVI2y .image-shape .label,#mermaid-svg-E3Yb3F6icoJDVI2y .icon-shape .label{text-align:center;}#mermaid-svg-E3Yb3F6icoJDVI2y .node.clickable{cursor:pointer;}#mermaid-svg-E3Yb3F6icoJDVI2y .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-E3Yb3F6icoJDVI2y .arrowheadPath{fill:#333333;}#mermaid-svg-E3Yb3F6icoJDVI2y .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-E3Yb3F6icoJDVI2y .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-E3Yb3F6icoJDVI2y .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E3Yb3F6icoJDVI2y .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-E3Yb3F6icoJDVI2y .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E3Yb3F6icoJDVI2y .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-E3Yb3F6icoJDVI2y .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-E3Yb3F6icoJDVI2y .cluster text{fill:#333;}#mermaid-svg-E3Yb3F6icoJDVI2y .cluster span{color:#333;}#mermaid-svg-E3Yb3F6icoJDVI2y div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-E3Yb3F6icoJDVI2y .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-E3Yb3F6icoJDVI2y rect.text{fill:none;stroke-width:0;}#mermaid-svg-E3Yb3F6icoJDVI2y .icon-shape,#mermaid-svg-E3Yb3F6icoJDVI2y .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-E3Yb3F6icoJDVI2y .icon-shape p,#mermaid-svg-E3Yb3F6icoJDVI2y .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-E3Yb3F6icoJDVI2y .icon-shape .label rect,#mermaid-svg-E3Yb3F6icoJDVI2y .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-E3Yb3F6icoJDVI2y .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-E3Yb3F6icoJDVI2y .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-E3Yb3F6icoJDVI2y :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 线程创建
分配程序计数器
分配Java虚拟机栈
分配本地方法栈
记录当前执行的字节码地址
唯一不会OOM的区域
存储栈帧:局部变量表/操作数栈/动态链接/出口
异常:StackOverflowError / OutOfMemoryError
为native方法服务
HotSpot中合并到虚拟机栈
1. 程序计数器(Program Counter Register)
- 当前线程所执行的字节码行号指示器
- 分支、循环、跳转、异常恢复等都依赖它
- 唯一一个不会抛出 OOM 的区域
2. Java虚拟机栈(Java Virtual Machine Stack)
每个方法调用都会创建一个栈帧入栈,方法结束则出栈。
| 栈帧组成 | 说明 |
|---|---|
| 局部变量表 | 存储方法参数和方法内定义的局部变量 |
| 操作数栈 | 字节码指令执行时的临时数据存储区 |
| 动态链接 | 指向运行时常量池中该方法的符号引用 |
| 方法出口 | 方法正常/异常返回时恢复上层调用者的状态 |
3. 本地方法栈(Native Method Stack)
为 native 方法服务。HotSpot 虚拟机将它与虚拟机栈合二为一。
三、线程共享的两个区域
所有线程共享同一份数据,是垃圾回收和内存调优的重点关注区域。
#mermaid-svg-gxiWZ0NCD6Ujr8XW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .error-icon{fill:#552222;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .marker.cross{stroke:#333333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW p{margin:0;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .cluster-label text{fill:#333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .cluster-label span{color:#333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .cluster-label span p{background-color:transparent;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .label text,#mermaid-svg-gxiWZ0NCD6Ujr8XW span{fill:#333;color:#333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .node rect,#mermaid-svg-gxiWZ0NCD6Ujr8XW .node circle,#mermaid-svg-gxiWZ0NCD6Ujr8XW .node ellipse,#mermaid-svg-gxiWZ0NCD6Ujr8XW .node polygon,#mermaid-svg-gxiWZ0NCD6Ujr8XW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .rough-node .label text,#mermaid-svg-gxiWZ0NCD6Ujr8XW .node .label text,#mermaid-svg-gxiWZ0NCD6Ujr8XW .image-shape .label,#mermaid-svg-gxiWZ0NCD6Ujr8XW .icon-shape .label{text-anchor:middle;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .rough-node .label,#mermaid-svg-gxiWZ0NCD6Ujr8XW .node .label,#mermaid-svg-gxiWZ0NCD6Ujr8XW .image-shape .label,#mermaid-svg-gxiWZ0NCD6Ujr8XW .icon-shape .label{text-align:center;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .node.clickable{cursor:pointer;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .arrowheadPath{fill:#333333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-gxiWZ0NCD6Ujr8XW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gxiWZ0NCD6Ujr8XW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-gxiWZ0NCD6Ujr8XW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .cluster text{fill:#333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .cluster span{color:#333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-gxiWZ0NCD6Ujr8XW rect.text{fill:none;stroke-width:0;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .icon-shape,#mermaid-svg-gxiWZ0NCD6Ujr8XW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .icon-shape p,#mermaid-svg-gxiWZ0NCD6Ujr8XW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .icon-shape .label rect,#mermaid-svg-gxiWZ0NCD6Ujr8XW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-gxiWZ0NCD6Ujr8XW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-gxiWZ0NCD6Ujr8XW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-gxiWZ0NCD6Ujr8XW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 线程共享区域
堆
存储所有对象实例和数组
方法区/元空间
存储类信息/常量/静态变量/JIT代码
年轻代
老年代
运行时常量池
编译期生成的各种字面量和符号引用
1. 堆(Heap)
- Java 内存管理中最大的一块
- 所有对象实例和数组都在这里分配
- 垃圾回收的主战场,分代回收的基础
- 可细分为:年轻代(Young Gen)、老年代(Old Gen)
2. 方法区(元空间 Metaspace)
- 存储已被加载的类信息、常量、静态变量、JIT编译后的代码
- JDK8 后用元空间 替代永久代,从JVM内存移到本地内存
- 包含运行时常量池,存放编译期生成的字面量和符号引用
四、完整总结
#mermaid-svg-2UWAcPahZEsULeog{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2UWAcPahZEsULeog .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2UWAcPahZEsULeog .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2UWAcPahZEsULeog .error-icon{fill:#552222;}#mermaid-svg-2UWAcPahZEsULeog .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2UWAcPahZEsULeog .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2UWAcPahZEsULeog .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2UWAcPahZEsULeog .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2UWAcPahZEsULeog .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2UWAcPahZEsULeog .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2UWAcPahZEsULeog .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2UWAcPahZEsULeog .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2UWAcPahZEsULeog .marker.cross{stroke:#333333;}#mermaid-svg-2UWAcPahZEsULeog svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2UWAcPahZEsULeog p{margin:0;}#mermaid-svg-2UWAcPahZEsULeog .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2UWAcPahZEsULeog .cluster-label text{fill:#333;}#mermaid-svg-2UWAcPahZEsULeog .cluster-label span{color:#333;}#mermaid-svg-2UWAcPahZEsULeog .cluster-label span p{background-color:transparent;}#mermaid-svg-2UWAcPahZEsULeog .label text,#mermaid-svg-2UWAcPahZEsULeog span{fill:#333;color:#333;}#mermaid-svg-2UWAcPahZEsULeog .node rect,#mermaid-svg-2UWAcPahZEsULeog .node circle,#mermaid-svg-2UWAcPahZEsULeog .node ellipse,#mermaid-svg-2UWAcPahZEsULeog .node polygon,#mermaid-svg-2UWAcPahZEsULeog .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2UWAcPahZEsULeog .rough-node .label text,#mermaid-svg-2UWAcPahZEsULeog .node .label text,#mermaid-svg-2UWAcPahZEsULeog .image-shape .label,#mermaid-svg-2UWAcPahZEsULeog .icon-shape .label{text-anchor:middle;}#mermaid-svg-2UWAcPahZEsULeog .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2UWAcPahZEsULeog .rough-node .label,#mermaid-svg-2UWAcPahZEsULeog .node .label,#mermaid-svg-2UWAcPahZEsULeog .image-shape .label,#mermaid-svg-2UWAcPahZEsULeog .icon-shape .label{text-align:center;}#mermaid-svg-2UWAcPahZEsULeog .node.clickable{cursor:pointer;}#mermaid-svg-2UWAcPahZEsULeog .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2UWAcPahZEsULeog .arrowheadPath{fill:#333333;}#mermaid-svg-2UWAcPahZEsULeog .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2UWAcPahZEsULeog .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2UWAcPahZEsULeog .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2UWAcPahZEsULeog .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2UWAcPahZEsULeog .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2UWAcPahZEsULeog .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2UWAcPahZEsULeog .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2UWAcPahZEsULeog .cluster text{fill:#333;}#mermaid-svg-2UWAcPahZEsULeog .cluster span{color:#333;}#mermaid-svg-2UWAcPahZEsULeog div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2UWAcPahZEsULeog .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2UWAcPahZEsULeog rect.text{fill:none;stroke-width:0;}#mermaid-svg-2UWAcPahZEsULeog .icon-shape,#mermaid-svg-2UWAcPahZEsULeog .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2UWAcPahZEsULeog .icon-shape p,#mermaid-svg-2UWAcPahZEsULeog .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2UWAcPahZEsULeog .icon-shape .label rect,#mermaid-svg-2UWAcPahZEsULeog .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2UWAcPahZEsULeog .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2UWAcPahZEsULeog .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2UWAcPahZEsULeog :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} JVM运行时数据区
线程私有
线程共享
程序计数器
Java虚拟机栈
本地方法栈
堆
方法区/元空间
运行时常量池
| 区域 | 线程私有/共享 | 存储内容 | 是否OOM |
|---|---|---|---|
| 程序计数器 | 私有 | 当前线程执行的字节码地址 | 否 |
| Java虚拟机栈 | 私有 | 栈帧(局部变量表、操作数栈等) | 是 |
| 本地方法栈 | 私有 | native方法调用信息 | 是 |
| 堆 | 共享 | 对象实例、数组 | 是 |
| 方法区/元空间 | 共享 | 类信息、常量、静态变量、JIT代码 | 是 |