JVM-对JVM的理解-上

1.JVM由类加载子系统、运行时数据区、执行引擎构成 2.内存区有共享区(堆和方法区)和线程私有区(java虚拟机栈、程序计算器、本地方法栈),java虚拟机栈里面还有栈帧,我们类里面每个方法会与每个栈帧会对应,当我们类main方法运行时,程序计算器会辅助操作数栈记录下一条执行指定,而我们方法的执行过程由操作数栈来完成,栈帧里面有局部变量、操作数栈、动态链接、方法出口。 3.下面是class文件反编译得到的执行命令文件,java原方法内容是定义1和2两个变量,相加并乘10,把结果发回,栈中执行过程如下:首先程序计算器会指向code=0,然后虚拟机会执行iconst_1这条指令,此时程序计算器会指向接下来要执行的下行指令code=1

3、以下图片命令行意义:

code:0>命令iconst_1意思是把第一个参数int 1加入操作数栈

code:1>然后istore_1是从操作数栈弹出赋给局部变量同时再次存回操作数栈

code:2>iconst_2把第二个参数2存入操作数栈

code:3>istore_2从操作数栈中弹出赋给局部变量同时再次存回操作数栈

code:4>iload_1 从局部变量加载之前存的1到操作计算器栈中

code:5>iload_2 从局部变量加载之前存的2到操作计算器栈中

code:6>iadd 加法操作 总之是程序计算器、配合操作数栈和局部变量完成方法的逻辑过程

4.方法出口其实是方法执行完了,程序计算器会执行方法的调用者

5.动态链接:程序运行过程中会把符号引用(不知道存放的内存地址,同个符号来指定)解析转化成直接引用这种情况,这个过程是动态链接

6.栈帧中的局部变量可以是常量,也可以是引用对象,但我们创建的实例对象是在堆中,所以我们程序启动加载过程中,栈帧中的局部变量需要引用到堆中的实例,这个过程就需要上面的动态链接来解析完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值