我知道这个问题有点泛,但我已经需要一个通用的答案了。所以我试图理解的是如何从内存的角度访问对象的成员变量,例如,在该对象上调用方法时?
例如,我有这个简单的类;
public class LimitedMap extends HashMap<String, Integer> {
@Override
public Integer computeIfAbsent(String key,
Function<? super String, ? extends Integer> mappingFunction) {
return Maps.computeIfAbsent(this, key, mappingFunction);
}
}
运行时如何计算 hoo 的内存地址,甚至在它初始化之前?同样适用于以下代码;
class Hoo {
public int field;
// constructor, setters, getters
...
}
class Foo {
Hoo hoo;
void setHoo() {
hoo = new Hoo(...)
}
}
运行时如何知道字段的地址,以便在其上存储值?
IMO,至少对于Java,这些变量地址被映射到类文件中的偏移量,因此可以通过将此偏移量添加到传递的对象引用(进入虚拟方法)来计算出精确位置(在虚拟内存上) 。但不确定......
有什么想法吗?