前言:
网络上有不少关于JVM内存模型的文章,讲解地很详细,但美中不足的是内容太过于详细以至于想了解JVM内存模型的读者只能望洋兴叹。这里简明扼要地讲解一下JVM内存模型以及各区的特点,以供想要大致了解其原理的读者管中窥豹。有不足之处还请读者见谅。
图解:
1:模型
JVM内存模型是JVM在Runtime
(运行时)所管理的内存区域,这也就是内存模型的由来。JVM内存模型根据Runtime
的特点会进行分区划分。划分的部分就为如上图所示的形式。
2:各区作用
- 方法区:存储已被虚拟机加载的类信息、常量、静态变量等数据
- 堆:存放对象的实例
- 虚拟机栈:存储基本类型数据、对象的引用
- 本地方法栈:执行Native方法
- 程序计数器:通过改变计数器的值来执行字节码的下一条指令
各区特点:
定义 | 特点 | 异常 | |
---|---|---|---|
方法区 | 堆的一个逻辑部分 | 线程共享 | OOM |
堆 | 堆内存 | 线程共享、JVM中内存最大 | OOM |
虚拟机栈 | 栈内存 | 线程私有、生命周期与线程相同 | OOM、SO |
本地方法栈 | Native方法 | / | OOM、SO |
程序计数器 | 当前线程所执行的字节码的行号指示器 | 内存空间小、线程私有 | 不存在 |