关于Java变量名字在内存中的疑问

局部变量的访问是通过方法栈的基址+偏移量这种方式实现的。每个变量的偏移量在这个函数编译阶段就确定了。也就是说这个偏移量在具体生成的指令中是写死了的,所以变量名是不需要的。
对象的成员变量的访问是通过对象的基址+偏移量这种方式实现的。虽然这个偏移量也是在这个类的编译阶段就确定了,但是java类是动态加载的,也就是说其它类的方法中调用这个成员变量的时候是没法知道这个偏移量的,所以生成的指令里只能先暂时用成员变量名代替,待真正执行时根据加载类的信息将这个成员变量名替换成偏移量再访问,即解析、链接的过程。
【关于Java变量名字在内存中的疑问】

■网友
局部变量在localvars上分配,localvars和operandstack上利用load和store命令往复的参与计算,计算都在operandstack上。类实例成员通过getfield和putfield命令加载到operandstack上参与计算和保存回去。类成员通过getstatic和putstatic命令操作。PS:Java核心技术系列:Java虚拟机规范(Java SE 8版)


    推荐阅读