代码中见到的使用setter赋值返回实体类
2019-12-06 14:39:46 0 举报
java
作者其他创作
大纲/内容
程序计数器(记录当前指针地址)
...
操作数栈
5 100
500
其他方法栈帧
当前线程执行位置
19
序号
字节码指令
0
sipush 500
3
istore_1
4
bipush 100
6
istore_2
7
iload_1
8
iload_2
9
idiv
10
istore_3
11
bipush 50
13
istore 4
15
getstatic #2
18
iload_3
iload 4
21
iadd
22
invokevirtual #3
25
return
线程独占空间
其他栈帧信息
将50压入操作数栈
操作数栈中 100 和 500 出栈
main方法栈帧
④
55
#2
当前线程
⑩
本地变量表
args
1
2
100
将栈顶int类型值保存到局部变量4中
5
50
虚拟机栈
①
D:\\code\\mybatis-projects\\mybatis-3-3.4.x\\data\\target\\classes> javap -v -p .\\MethodAreaDemo.classClassfile /D:/code/mybatis-projects/mybatis-3-3.4.x/data/target/classes/MethodAreaDemo.class Last modified 2022-3-6; size 604 bytes MD5 checksum 756cc2aa967eaf4a4de0d4be0a8fd09c Compiled from \"MethodAreaDemo.java\
将本地变量3取出压入操作数栈
①⑧
/** * 图解方法区的使用 * @author 活着 * @date 2022-03-06 23:17 */public class MethodTimeAreaTest { public static void main(String[] args) { int x = 500; int y = 100; int a = x / y; int b = 50; System.out.println(a + b); }}
③
I-Cache
⑤
。。。
读取本地变量2压入操作数栈
将栈顶两int类型数相除,结果入栈500/100=5
程序入口:main方法
将栈顶两int 类型数相加,结果入栈
②
⑥
①⑤
读取本地变量1(这里的1是本地变量表的索引)压入操作数栈
将500这个数值压入操作数栈
0(当前指针地址)
①④
获取类或接口字段的值并将其推入操作数栈#2 对应常量池中的Fieldref #15.#16
void函数返回main方法执行结束
①⑦
#2 对应的是System.out.println
①②
5个本地变量变量0是方法参数args(因为是static方法,如果不是static方法,变量0是this)
将计算结果 5 放在本地变量表 3 的位置
①③
①①
⑨
方法区
弹出操作数栈栈顶500保存到本地变量表1处
⑧
弹出操作数栈栈顶100保存到本地变量表2
调用静态方法jvm会根据这个方法的描述,创建新栈帧,方法的参数从操作数栈中弹出来,压入虚拟机栈,然后虚拟机会开始执行虚拟机栈最上面的栈帧执行完毕后,在继续执行main方法对应的栈帧
55 50
程序计数器
①⑥
将本地变量4取出压入操作数栈
将100这个数值压入操作数栈
System.out.print 方法栈帧
⑦
0 条评论
回复 删除
下一页