最近在看<深入理解Java虚拟机>,里面讲到了Java运行时数据区,这是Jvm基本知识,把读书笔记记录在此.这些知识属于常识,都能查到的,如果我有理解不对的地方,还请指出. 首先把图贴上来,图来自JVM Runtime Data Areas(运行时数据区),感谢. 由上图可知,Java运行时数据区域包括程序计数器.Java虚拟机栈.本地方法栈.Java堆.方法区. 1. 程序计数器 程序计数器用来记录下一条字节码指令,因为CPU是要轮转的,在切换回来之后,Java能够找到下一条要执行的指令.如…
根据<Java虚拟机规范(第2版)>的规定,Java虚拟机管理的内存包括下图几个运行时数据区域: 1.程序计数器        程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖这个计数器来完成…
JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途.创建和销毁时间.根据<Java虚拟机规范>,JVM包括下列几个运行时数据区域,如下图所示: 其中红色部分是线程私有的,即每个线程各自都有自己的一份.绿色部分是各个线程共享的. 1.PC寄存器(The pc Register) (1)每一个Java线程都有一个PC寄存器. (2)PC寄存器是用于存储每个线程下一步将执行的JVM指令,如该方法为native的,则PC寄存器中不存储任何信息. (3)此内存区域是唯一一个在JV…
java虚拟机在执行java程序的过程中,会把内存划分为若干个不同的数据区域.每个区域都有各自的用途,创建和销毁时间,按照<java虚拟机规范(Java SE 7 版)>的规定,虚拟机运行时数据区域主要有以下几种: 1.程序计数器 程序计数器是很小的一块内存区域,可以看做是当前线程所执行字节码的行号指示器.在虚拟机的概念模型中,字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等基础功能均依赖于程序计数器.在多线程中,每个线程都有…
目前三大主流JVM: Sun HotSpot:Sun于1997年收购Longview Technologies公司所得.Sun于2009年被Oracle收购. BEA JRockit:BEA于2002年收购Appeal Virtual Machines公司所得.BEA将其发展为一款专门为服务器硬件和服务器端应用场景高度优化的虚拟机,由于专注于服务器端应用,它可以不太关注程序启动速度,因此JRockit内部不包含解析器实现,全部代码都靠即时编译器编译后执行.除此之外,JRockit的垃圾收集器和M…
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.根据<Java虚拟机规范(Java SE7版)>的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域.如下图所示 1. 程序计数器 程序计算器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器.在虚拟…
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁时间.根据<Java虚拟机规范(Java SE 7版>的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示. 程序计数器 程序计数器是一块较小的内存空间,它可以看做是当前线程(每个线程都有一个独立的程序计数器)所执行的字节码的行号指示器. Java虚拟机栈 Java虚拟机栈也是也是线程私有的.虚拟机栈描述的是Java方法执行的内存模型:每个方法在执…
根据<Java 虚拟机规范(Java SE 7版)>规定,Java虚拟机所管理的内存,将会包括以下几个运行时数据区域: 注: 1.由所有线程共享的数据区: 对应 java内存模型的主内存,各线程共有: 2.线程隔离的数据区:对应 java内存模型的工作内存,各自线程持有: 1.程序计数器(线程私有) 程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器. 在虚拟机的概念模型里,字节码解释器工作时,就是通过改变“这个…
概述 JVM是Java语言的精髓所在,因为它Java语言实现了跨平台运行,以及自动内存管理机制等,本文将从概念上介绍JVM内存的各个区域,说明个区域的作用. JVM运行时数据区模型 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分成若干个不同的数据区域,这些数据区域都有各自的用途,以及创建和销毁时间,Java虚拟机所管理的内存将会包括以下几个运行时数区域 程序计数器 程序计数器是一块比较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器…
1. 程序计数器 当前线程所执行的字节码的行号指示器. 2. Java虚拟机栈 线程私有,与线程具有相同生命周期.用于存储局部变量表.操作数栈.动态链表.方法出口等信息. 局部变量表存放内容: 基本数据类型(boolean.byte.char.short.int.float.long.double) 对象引用(区别于符号引用,符号引用存放在常量池) returnAddress类型(指向一条字节码指令的地址) 64位长度的long和double类型数据占用2个局部变量空间(slot),其余占用1个…