栈区 栈区描述的是方法执行的内存模型。每个方法在执行时都会创建一个栈帧(存储局部变量、操作数栈、动态链接、方法出口等) JVM为每个线程创建一个栈,栈属于线程私有,不能实现线程间的共享,用于存放该线程执行方法的信息(实际参数、局部变量等) 基本类型变量去,执行环境上下文,操作指令区(存放操作指令) ...
分类:
其他好文 时间:
2019-08-05 20:33:25
阅读次数:
128
字节码指令 大部分操作指令都有对应不同类型的不同指令,比如iload istore ireturn表示加载(整形变量进操作数栈)、定义一个整形局部变量、返回一个int类型值 return 1+1==》iconst 2;ireturn 编译期优化:直接将1+1定义为常量2 运行时就不用再做计算了 这段 ...
分类:
编程语言 时间:
2019-07-22 09:56:36
阅读次数:
129
最近学习的JVM小册中老师提了个问题: 最开始我觉得是1,结果程序跑出来是0,感到很疑惑,于是查看了下字节码: 从字节码可以看出: 0:定义变量0 1:将0存入本地变量表slot-0 2:加载slot-0到操作数栈 3:将栈顶元素存入本地变量表slot-1 4:对slot-0自增 7-8:加载slo ...
分类:
其他好文 时间:
2019-07-04 17:25:29
阅读次数:
91
JVM的内存结构根据JVM规范,JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。1.Java虚拟机栈:线程私有;每个方法在执行的时候会创建一个栈帧,存储了局部变量表,操作数栈,动态连接,方法返回地址等;每个方法从调用到执行完毕,对应一个栈帧在虚拟机栈中的入栈和出栈。2.堆:线程共享;被所有线程共享的一块内存区域,在虚拟机启动时创建,用于存放对象实例。3.方法区:线程共享;被所
分类:
数据库 时间:
2019-07-04 17:18:32
阅读次数:
144
此区域是用于程序指令执行 虚拟机栈(FILO):java方法执行的内存模型。 栈帧(线程执行的一个方法的内存模型,每调用一个方法,压入一个栈帧) 局部变量表:编译器可知的8种基本类型、reference类型、returnAddress类型 操作数栈:一个用于计算的临时数据存储区(明显,此栈是为了存放 ...
分类:
编程语言 时间:
2019-06-17 00:56:56
阅读次数:
151
虚拟机栈 1、虚拟机栈维护一个线程中所有方法的栈帧,每个栈帧中保存着这个方法中用到的局部变量表,操作数栈,常量引用 2、可以用-Xss来设置每个线程中虚拟机栈的大小,在jdk1.4之前默认虚拟机栈大小是256K,在jdk1.5+默认虚拟机栈大小是1M 3、该区域可能抛出的异常 当线程请求的栈深度超过 ...
分类:
其他好文 时间:
2019-06-15 13:48:31
阅读次数:
76
一.运行时数据区 共分为5块: 程序计数器 (线程私有,当前线程所执行的字节码的行号指示器) Java虚拟机栈 (线程私有,证明周期与线程相同,描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧,用于存储:局部变量表、操作数栈、动态链接、方法出口等信息) 本地方法栈 (线程私有 ...
分类:
编程语言 时间:
2019-06-04 11:07:23
阅读次数:
105
案例代码如下: 编译之后主要指令集如下: 其中第17行到第41行是add方法的指令,接下来就一行一行图解虚拟机栈是如何执行的! 第一步:iconst_5 :将int类型的常量5压入操作数栈 第二步:istore_2 :将操作数栈顶中int类型数据放入局部常量表下标为2的位置,从0开始数也就是第三个位 ...
分类:
其他好文 时间:
2019-04-12 00:45:29
阅读次数:
195
Java编译器输出的指令流,基本上[1]是一种基于栈的指令集架构,它们依赖操作数栈进行工作 与之相对的另外一套常用的指令集架构是基于寄存器的指令集 举个最简单的例子,分别使用这两种指令集计算“1+1”的结果,基于栈的指令集会是这样子的: 基于栈的指令集主要的优点就是可移植, 缺点是执行速度慢,相同操 ...
分类:
其他好文 时间:
2019-04-09 20:35:24
阅读次数:
183
虚拟机内存区常见名词: 栈帧(Frames): 栈帧是用来存储数据和部分结果,以及执行动态链接、方法返回值和异常信息的。 每次方法的调用都会生成一个栈帧,然后将该栈帧进行压栈。当方法结束后,该栈帧将会出栈、被销毁。 无论是正常结束还是异常结束。 每个栈帧都是自己的局部变量表、操作数栈、以及对当前方法 ...
分类:
编程语言 时间:
2019-02-22 00:34:37
阅读次数:
193