Java 如何将变量名与内存中的位置关联起来?

Dan*_*ter 4 java memory-management

Java 如何将变量名与内存中的位置关联起来?

我对此的第一个想法是必须有一个用于所有变量名称的静态表,该静态表将其与其值或其值的位置相关联。它是否存在并且该表有正式名称吗?

zch*_*zch 5

基本类型变量的值是某个数字,而引用类型变量的值是引用(通常是内存地址)。

现在的问题是:给定变量的存储值在哪里。这取决于变量的种类——有局部变量、实例变量(字段)和类变量(静态字段)。

本地名称在编译期间解析。每个变量只是方法中的第 i 个变量,并且将作为第 i 个变量存储在某个方法调用的堆栈帧中。

例如变量会有所不同。字段名称始终出现在字节码中(但通常不会出现在 JIT 编译器生成的机器代码中)。给定类的所有对象都具有相同的布局,因此类可以存储给定字段的偏移量- 距对象开头的距离。解释器可以读取对象的地址并添加偏移量来计算变量存储的位置。

类变量与实例变量类似,但更简单。在这种情况下,类存储其变量的名称和值。

  • 字段和局部变量名称在编译期间解析为表偏移量。在运行时,变量由其包含的堆栈框架/实例/类(对于静态)拥有,但没有返回到它的链接——它们不需要。不存在在堆栈框架/实例/等容器之外访问变量之类的东西。 (2认同)