JVMS说:在 Oracle 的 Java 虚拟机实现中,对类实例的引用是一个指向句柄的指针,该句柄本身就是一对指针:一个指向包含对象方法的表,另一个指向代表该对象的 Class 对象对象的类型,另一个是从堆中为对象数据分配的内存。我不明白为什么引用会以这种方式实现,而不是使它们成为指向方法表指针的指针,后跟对象的数据。这将避免创建对象时的额外内存分配和字段访问时的额外指针取消引用。Oracle 这样做的原因是什么?
1 回答
哈士奇WWW
TA贡献1799条经验 获得超6个赞
这种策略将允许在内存中移动对象,而无需调整所有现有引用,因为只需要调整一个直接指针。移动内存中的对象将通过复制或压缩垃圾收集器来完成。
然而,对于所有最近的 JVM 实现,这种间接的成本被认为不值得节省,因此“一些 Oracle 的实现”实际上意味着“Oracle 在购买 Sun 时获得的 Sun 的一些非常旧的 JVM”。如今,现实世界中的 JVM 在移动内存中的对象时确实会调整所有引用。
换句话说,对于仍在使用的 JVM,这是一个相当过时的声明,但作为替代实现策略的示例保留在规范中。
添加回答
举报
0/150
提交
取消