Java程序需要通过栈中的 reference 数据操作堆上的数据,目前主流实现有 句柄池 跟 直接指针两种。
句柄池。在堆中开辟一块空间作为句柄池的地址,reference类中存储的地址是对象的句柄池地址,句柄数据中包含对象的实例数据与类型数据。
直接指针。reference类中存储的是对象的实例数据,需要额外考虑如何存储类型数据
句柄池的好处在于改变时只需要修改修改句柄中的实例数据指针即可。
直接指针的好处在于节省了一次定位指针的开销。对象的访问十分频繁,Hotspot采用的是直接指针的方式。