JVMS說:在 Oracle 的 Java 虛擬機實現中,對類實例的引用是一個指向句柄的指針,該句柄本身就是一對指針:一個指向包含對象方法的表,另一個指向代表該對象的 Class 對象對象的類型,另一個是從堆中為對象數據分配的內存。我不明白為什么引用會以這種方式實現,而不是使它們成為指向方法表指針的指針,后跟對象的數據。這將避免創建對象時的額外內存分配和字段訪問時的額外指針取消引用。Oracle 這樣做的原因是什么?
1 回答

哈士奇WWW
TA貢獻1799條經驗 獲得超6個贊
這種策略將允許在內存中移動對象,而無需調整所有現有引用,因為只需要調整一個直接指針。移動內存中的對象將通過復制或壓縮垃圾收集器來完成。
然而,對于所有最近的 JVM 實現,這種間接的成本被認為不值得節省,因此“一些 Oracle 的實現”實際上意味著“Oracle 在購買 Sun 時獲得的 Sun 的一些非常舊的 JVM”。如今,現實世界中的 JVM 在移動內存中的對象時確實會調整所有引用。
換句話說,對于仍在使用的 JVM,這是一個相當過時的聲明,但作為替代實現策略的示例保留在規范中。
添加回答
舉報
0/150
提交
取消