1. 整体分类
程序计数器
虚拟机栈
本地方法栈
Java 堆
方法区
运行时常量池
直接内存
2. 程序计数器
- 每个线程一个计数器,线程的私有内存
-
指向的是字节码的内存地址?
- 如果线程执行的是 Java 方法,指向的是虚拟机字节码的内存地址
- 如果线程执行的是本地方法,计数器值为空
- 不会抛出 OutOfMemoryError
3. 虚拟机栈
- 线程私有
- 会抛出 *Error 和 OutOfMemoryError
- 是指 java 方法执行时的内存占用
4. 本地方法栈
- 本地方法执行时的内存占用
- 会抛出 *Error 和 OutOfMemoryError
5. Java 堆
- 几乎所有的对象实例都在 Java 堆中分配
- -Xmx -Xms
- 会抛出 OutOfMemoryError 异常
- Java 堆细分
- 新生代
- Eden 空间
- From Survivor 空间
- To Survivor 空间
- 老年代
- 新生代
6. 方法区
- 被各个线程共享
- 存放类信息,常量,静态变量
- 对 HotSpot 来说是永久代
- 抛出 OutOfMemoryError
7. 直接内存
- 受本机直接内存的影响
- 并非 jvm 运行时数据区的一部分
- 也会抛出 OutOfMemoryError