Forever Young

What are you following

  • 首页
  • 标签
  • 分类目录
  • 文章归档
  • 行路万里
  • 读书万卷
  • About Me

  • 搜索
面经 解决方案 操作系统 Java源码 开源 GSoC 哲学 中间件 回溯 链表 书 top 数据库 分布式 滑动窗口 配置 动态规划 前缀树 并查集 Redis 总结 年终总结 面试 算法基础

9.27 | a++,++a 在JVM发生了什么?

发表于 2022-09-27 | 分类于 学习 | 阅读次数 255
9.24 | 讲讲操作系统的多级页表,为什么多级页表会省空间?
10.11 | 下次提CAP的时候,记得加FLP不可能定理、上PACELC理论、NWR策略

a=a++,a =++a

下列代码输出是?从JVM的角度讲讲发生了什么

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;
        a++;
        b = b++;
        c = ++c;

        System.out.println(a);
        System.out.println(b);
        System.out.println(c); 
    }

部分字节码:

 stack=2, locals=4, args_size=1
         0: bipush        10
         2: istore_1
         3: bipush        20
         5: istore_2
         6: bipush        30
         8: istore_3
         9: iinc          1, 1
        12: iload_2
        13: iinc          2, 1
        16: istore_2
        17: iinc          3, 1
        20: iload_3
        21: istore_3

(请忽略下图中运行时常量池里的指令)
此例中,主要涉及以下几部分组件。
堆,存放对象
执行引擎,用来执行指令
堆栈,存放变量表和操作数栈
方法区,方法字节码会载入方法区

在这里插入图片描述

指令科普:

istore_x 将操作数栈栈顶元素弹出,放入局部变量表的 slot x中

iload_x 将 局部变量中x位置的元素 放到操作数栈中

iinc 1,1 (iinc, (value1,value2) value1是对哪个位置的数操作,value2是给value1加多少)

对于a

       9: iinc          1, 1 // 将局部变量1号位+1,自增后,1号位置 11

对于b

iload_2  //将局部变量2号位置放入操作数栈中,此时操作数栈 20
iinc          2, 1 // 将局部变量2号位+1,自增后,2号位置 21,操作数中 20
istore_2   //将操作数栈栈顶元素弹出,放入局部变量表的2号位置中 此时,2号位置20,操作数中20 

对于c

iinc          3, 1 // 将局部变量3号位+1,自增后,3号位置 31,操作数中 空 
iload_3    // 将3号位置放入操作数栈,操作数中 31
istore_3  // 将操作数栈栈顶元素弹出,放入局部变量表的3号位置中,将31赋值给31,此时c=31

输出

a=11

b=20

c=31

image-20220927181203099

ps:如果此例子看不懂请移步这里:图解方法流程

9.24 | 讲讲操作系统的多级页表,为什么多级页表会省空间?
10.11 | 下次提CAP的时候,记得加FLP不可能定理、上PACELC理论、NWR策略

  • 文章目录
  • 站点概览
erdengk

erdengk

87 日志
5 分类
24 标签
RSS
Github E-mail
Creative Commons
友链
  • 星球球友
  • Joey
  • 北松山(itwaix)-TP在职
  • JooKS' Blog-GSoC 2022 Mentor
  • Chever-John-Shein在职
  • 一堆网页小游戏
  • 飞鸟记
0%
© 2019 — 2023 erdengk
由 Halo 强力驱动
陕ICP备2021015348号-1
川公网安备 51011202000481号
轻点广告,请我喝水,非常感谢 (。・ω・。)ノ(*/ω\*)