本地方法栈
本地方法栈保存的是 native 方法的信息。
当一个 JVM 创建的线程调用 native 方法后,JVM 不再为其在虚拟机栈中创建栈帧,JVM 只是简单的动态链接并直接调用 native 方法
线程共享区域
方法区
- 类信息
- 常量
- 静态变量
- 即时编译期编译后的代码
<= JDK 1.7 永久代
>= JDK 1.8 元空间 (使用的是堆外内存或者叫机器内存,不受限于堆内存,方便拓展,但是会挤压堆空间)
这部分内容是比较难回收的。
Java 堆
- 对象实例(几乎所有)
- 数组
堆中的数据是需要频繁回收的。
所以分成了两部分来进行分离
Java 堆参数大小设置
-Xmx 堆区内存可分配最大上限
-Xms 堆区内存可分配最小下限
直接内存(堆外内存)
image.png不受限于对大小限制,但受到本机总内存限制。会出现 oom 异常。
运行时数据区
- 申请内存
- 类加载 -> class 进入方法区
- 类中的常量、静态变量进入方法区
- 虚拟机栈入栈帧
- 对象引用入局部变量表
- GC
HSDB (内存可视化工具)
window
内存溢出
- 栈溢出
方法递归 - 堆溢出
- 方法区溢出
- 本机直接内存溢出
网友评论