一、JVM内存结构快速复盘
1.1 运行时数据区核心架构
JVM Memory
线程私有区
线程共享区
程序计数器
虚拟机栈
本地方法栈
堆内存
方法区/元空间
1.2 各区域默认容量(JDK8)
内存区域 | 默认最大值 | 调整参数 |
---|---|---|
堆内存(Heap) | 物理内存1/4 | -Xmx |
元空间(Metaspace) | 无限制(受物理内存约束) | -XX:MaxMetaspaceSize |
栈内存(Stack) | 1MB(不同OS有差异) | -Xss |
直接内存(Direct) | ≈堆最大容量 | -XX:MaxDirectMemorySize |
二、OOM七大经典场景解析
2.1 堆内存溢出(Java Heap Space)
触发条件:
-
对象数量超过
-Xmx
设置的最大堆值 -
GC后内存仍无法满足新对象分配
错误示例特征:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at com.demo.OOMDemo.generateO