关于Java变量名字在内存中的疑问
局部变量的访问是通过方法栈的基址+偏移量这种方式实现的。每个变量的偏移量在这个函数编译阶段就确定了。也就是说这个偏移量在具体生成的指令中是写死了的,所以变量名是不需要的。
对象的成员变量的访问是通过对象的基址+偏移量这种方式实现的。虽然这个偏移量也是在这个类的编译阶段就确定了,但是java类是动态加载的,也就是说其它类的方法中调用这个成员变量的时候是没法知道这个偏移量的,所以生成的指令里只能先暂时用成员变量名代替,待真正执行时根据加载类的信息将这个成员变量名替换成偏移量再访问,即解析、链接的过程。
【关于Java变量名字在内存中的疑问】
■网友
局部变量在localvars上分配,localvars和operandstack上利用load和store命令往复的参与计算,计算都在operandstack上。类实例成员通过getfield和putfield命令加载到operandstack上参与计算和保存回去。类成员通过getstatic和putstatic命令操作。PS:Java核心技术系列:Java虚拟机规范(Java SE 8版)
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 智叔|很多家长还在整箱买:谈谈关于牛奶的17个真相警惕这些列入黑名单的“假牛奶”
- 关于微信小程序的思考:运营者该何去何从
- 关于人工智能虚拟人的一些问题
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展