JVM虚拟机运行时数据区域的理解
来源:互联网 发布:mac传照片给iphone 编辑:程序博客网 时间:2024/06/05 08:34
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用户,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而创建和销毁。
1.程序计数器
程序计数器(program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅仅是概念模型,各种虚拟机可能会通过一些更加高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖这个计数器来完成。
由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都会执行一条线程中的指令。因此为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各个线程之间计数器互不影响,独立存储,我们称这类内存区域为线程私有的内存。
如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值则为空(Undefined)。此内存区域是唯一一个在java虚拟机中没用规定任何outOfMemoryErroe情况的区域。
2.Java栈
在java虚拟机规范中,对这个区域规定了两种异常情况:如果县城请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展而扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。
3.本地方法栈
4.Java堆
5.方法区
6.运行时常量池
7.直接内存
- JVM虚拟机运行时数据区域的理解
- JVM虚拟机运行时数据区域的理解
- JVM虚拟机运行时数据区域的理解
- java虚拟机运行时的数据区域
- Java虚拟机运行时的数据区域
- java虚拟机运行时数据区域及对象的探秘
- 笔记一:虚拟机运行时的数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- Java虚拟机运行时数据区域
- jvisualvm远程监控Linux下的tomcat
- HTTP 请求头详解
- C# SHA加密
- 1、MVC运行原理
- 搭建图片服务器
- JVM虚拟机运行时数据区域的理解
- Python判断文件和文件夹是否存在的方法
- 外卖管理系统--C语言课设
- Valid Type Name, BindingResult bindingResult
- jQuery实现字符串全部替换的方法
- angularjs简单demo(转载,原网址找不到了)
- [日推荐]『饿了么外卖服务』饿了么官方小程序,无需下载安装!
- 让远程主机可以通过网络访问sshd服务
- iOS 堆和栈的区别?