参考地址:https://www.zhihu.com/question/24747160

问:int a = 3; 首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址?
      是不是说要建立一个字面值为3的内存,再建立一个指向3的地址?就是要建立2个内存?

答:

	public void foo() {
int i = 100000000;
int j = 1;
Bar b = new Bar();
}

上面代码编译成class文件之后

  public void foo();
flags: ACC_PUBLIC
Code:
stack=2, locals=4, args_size=1
0: ldc #15 // int 100000000
2: istore_1
3: iconst_1
4: istore_2
5: new #1 // class Bar
8: dup
9: invokespecial #16 // Method "<init>":()V
12: astore_3
13: return
LineNumberTable:
line 3: 0
line 4: 3
line 5: 5
line 6: 13
LocalVariableTable:
Start Length Slot Name Signature
0 14 0 this LBar;
3 11 1 i I
5 9 2 j I
13 1 3 b LBar;

栈深度为2 本地变量表为4(对象方法对this的引用 存储i和j需要的地址 存储Bar用的地址)
由于我代码中是写死的字面常量100000000 所以有个ldc命令去常量池里读了

#15 = Integer            100000000

这个常量 然后调用store命令存入了本地变量表的第Name为1的位置
然后后边的int j = 1; 直接调用了iconst_1(这个1都没有存到类的常量池里..)获取了值为1的常量 然后存储到了Name为2的位置
然后Bar对象是引用类型 所以是LBar
例子并不全 你可以自己加一些代码 比如你加一个 int h = i + j;
你就会发现他通过iload命令读取加载变量表中指定位置的值到栈中 然后调用iadd自动从栈中弹出两个之前加载的int值进行计算 栈深度其实就是指他一次能加载多少变量到栈

这个不容易理解,找本虚拟机的书 了解下基本指令 然后对照自己的class文件 就明白了

最新文章

  1. BeautifulSoup :功能使用
  2. ubuntu安装使用GitHub--PC端
  3. nginx 反向代理 google
  4. 海量字符串查找——bloom filter,c
  5. 【教程】【FLEX】#003 自定义事件、模块间通讯
  6. Android之开发杂记(三)
  7. [BILL WEI] A potentially dangerous Request.Path value was detected from the client 异常处理办法
  8. File Operation using SHFileOperation
  9. 安装mod_deflate模块启用apache的GZIP压缩
  10. asp.net 中如何判断字符串中有几个逗号 (asp也通用)
  11. Android 播放gif图片
  12. 手动修改VisualStudio IISExpress的配置
  13. [HNOI2013]消毒
  14. Excel汉字转换拼音首字母缩写的函数
  15. JDK动态代理给Spring事务埋下的坑!
  16. SpringBoot集成Shiro安全框架
  17. 再论sklearn分类器
  18. Android:DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs
  19. mysql 性能测试工具 mysqlslap
  20. MAYA逼真手枪制作视频教程 中文字幕

热门文章

  1. ObjectARX学习笔记(三十二)----怎样设置AcDbMText对齐方式
  2. Snail—iOS网络学习之得到网络上的数据
  3. 使用Apache Ant合并多个jar
  4. React通用后台管理系统
  5. jquery和CSS3带倒影的3D万花筒旋转动画特效效果演示
  6. 蓝牙BlueTooth技术学习理解
  7. HDU2089 不要62 —— 数位DP
  8. IO、FileInputStream、(二十)
  9. 转:创建表空间,删除后再次创建,报错ORA-01119
  10. Android「后台下载」Feb.24小记