目录 JVM栈之局部变量表:包含参数和局部变量 JVM栈之操作数栈 JVM栈之栈上分配(动态链连接) 目录 JVM栈之局部变量表:包含参数和局部变量 JVM栈之操作数栈 JVM栈之栈上分配(动态链连接) 每当启动一个新线程时,Java虚拟机都会为它分配一个Java栈。Java栈以帧为单位保存线程的运 ...
分类:
其他好文 时间:
2018-09-11 21:28:43
阅读次数:
221
一、 运行时数据区域 一、 运行时数据区域 1.1 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 1.2 Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一 ...
分类:
编程语言 时间:
2018-09-09 11:54:58
阅读次数:
132
1、运行时数据区域 1.1、程序计数器 线程私有,当前线程所执行的字节码行号指示器, Java虚拟机的多线程是通过线程轮流切换处理器执行时间的方式来分配 1.2、Java虚拟机栈 线程私有,,虚拟机的局部变量表每个方法在执行的时候都会创建栈帧用于存储局部变量,操作数栈,动态链接方法出口等信息,每个方 ...
分类:
编程语言 时间:
2018-09-07 23:56:38
阅读次数:
322
一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法 ...
分类:
编程语言 时间:
2018-08-15 21:36:21
阅读次数:
233
堆(heap):FIFO,所有线程共享的一块内存,是专门存放对象实例的地方,GC发生在这里。随JVM启动而创建 栈(stack):LIFO,应该叫做虚拟机栈,每个线程私有的,存放该线程调用的方法栈帧,存储局部变量表、操作数栈、程序出口、动态链接等,每一个方法的调用就是入栈出栈的过程。 方法区(non ...
分类:
其他好文 时间:
2018-08-14 14:26:19
阅读次数:
206
一、栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个方法时,才为当前栈分配一个帧,然后将该帧压入栈 栈帧帧是由局部变量区、操作数栈和帧数据区组成 jav ...
分类:
其他好文 时间:
2018-08-06 12:16:02
阅读次数:
171
回顾一下前文,知道了属性表的Code属性存着Java程序方法体的代码经过Javac编译器处理后,最终变为字节码指令。还知道了Code属性表中的code是一个u1类型的单字节,取值范围是0x00~0xFF,也就是一共最多能表达256条指令。 由于Java虚拟机采用面向操作数栈而并非寄存器的架构,所以大 ...
分类:
其他好文 时间:
2018-07-29 15:14:17
阅读次数:
176
一、栈帧结构 讲栈帧结构有必要回顾一下前文Class文件中的Code属性结构,如下图。 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机栈的栈元素。每一个方法从调用开始到执行完成,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。每一个栈帧都包括了局部变量表,操作数栈,动态连接,方法 ...
分类:
其他好文 时间:
2018-07-29 15:12:21
阅读次数:
177
一、虚拟机栈(VM Stack) 1.1)什么是虚拟机栈 虚拟机栈是用于描述java方法执行的内存模型。 每个java方法在执行时,会创建一个“栈帧(stack frame)”,栈帧的结构分为“局部变量表、操作数栈、动态链接、方法出口”几个部分(具体的作用会在字节码执行引擎章节中讲到,这里只需要了解 ...
分类:
其他好文 时间:
2018-07-11 12:25:01
阅读次数:
182
操作数栈管理指令1)pop、pop2:将操作数栈的栈顶一个或两个元素出栈。2)dup、dup2、dup_x1、dup2_x1、dup_x2、dup2_x2:复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶。3)swap:将栈最顶端两个数值互换。publicstaticvoidmain(String[]args){heavyMethod();}对应的字节码:publicstaticvoid
分类:
其他好文 时间:
2018-06-20 19:05:47
阅读次数:
187