如何在方法调用中找出对象成员的地址?

时间:2017-05-28 13:08:32

标签: memory-management methods virtual-method member-variables memory-access

我知道这个问题有点泛,但我已经需要一个通用的答案了。所以我试图理解的是如何从内存的角度访问对象的成员变量,例如,在该对象上调用方法时?

例如,我有这个简单的类;

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,这些变量地址被映射到类文件中的偏移量,因此可以通过将此偏移量添加到传递的对象引用(进入虚拟方法)来计算出精确位置(在虚拟内存上) 。但不确定......

有什么想法吗?

0 个答案:

没有答案