深入理解 JVM 系列:运行时数据区域
2017-10-05 00:31
435 查看
一、概述
Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。
二、程序计数器
程序计数器是一块极小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。所以,每个线程都需要这样的一个 “线程私有” 的内存区域,互不影响,独立存储,来保证线程切换后能恢复到正确的执行位置。
如果线程正在执行的是一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是 Native 方法,这个计数器值则为空(Undefined)。
此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。
三、Java 虚拟机栈
四、本地方法栈
五、Java 堆
六、方法区
七、运行时常量池
八、直接内存
参考资料:
《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》
Java 虚拟机(一)结构原理与运行时数据区域
Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。
二、程序计数器
程序计数器是一块极小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。所以,每个线程都需要这样的一个 “线程私有” 的内存区域,互不影响,独立存储,来保证线程切换后能恢复到正确的执行位置。
如果线程正在执行的是一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是 Native 方法,这个计数器值则为空(Undefined)。
此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。
三、Java 虚拟机栈
四、本地方法栈
五、Java 堆
六、方法区
七、运行时常量池
八、直接内存
参考资料:
《深入理解 Java 虚拟机:JVM 高级特性与最佳实践》
Java 虚拟机(一)结构原理与运行时数据区域
相关文章推荐
- JVM深入理解--第二章--运行时数据区域
- 深入理解JVM(一)-Java运行时数据区域
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
- 深入理解JVM:JVM运行时数据区域分类
- 深入理解JVM虚拟机:(一)Java运行时数据区域
- 深入理解JVM(一)——运行时的数据区域
- 《深入理解 Java 虚拟机》学习笔记(1)—— JVM 运行时数据区
- 深入理解Java虚拟机 学习记录--运行时数据数据区域
- 【Java】深入理解JVM学习笔记(一) —— JVM数据区域
- 【深入理解JAVA虚拟机】之运行时数据区域
- JVM调优系列:(二)JVM运行时数据区域
- JVM调优系列:(二)JVM运行时数据区域
- 深入理解JAVA虚拟机--运行时数据区域
- JVM系列(一)-运行时的数据区域(总结)
- 深入理解JVM 系列JVM运行机制 JVM内存模(volatile,指令重排)
- 《深入理解 Java 虚拟机》- 笔记 - Java 运行时数据区域
- 《深入理解 Java 虚拟机》学习笔记(1)—— JVM 运行时数据区
- 【笔记】深入理解 java 虚拟机---运行时数据区域