在现代JVM中,引用被实现为地址。
回到HotSpot的第一个版本(对于“经典VM”来说更早一些),引用被实现为句柄。那是指向指针的固定指针。对于任何特定对象,第一个指针永远不会更改,但是随着对象数据本身的移动,第二个指针也会更改。显然,这会影响使用性能,但是更容易编写GC。
在最新的JDK7版本中,支持“压缩的oops”。我相信BEA
JRockit已经有一段时间了。迁移到64位系统需要两倍的内存,因此需要地址带宽。“压缩的oop”利用地址的最低有效三位或四位始终为零的优势。将32位数据左移三位或四位,从而允许32或64
GB的堆,而不是4 GB。



