对象的访问定位:句柄与直接指针
Java程序通过栈中的reference数据来操作堆上的具体对象,而对象的访问方式取决于虚拟机的实现。主流访问方式有句柄和直接指针两种
句柄方式
Java堆中将会划出一块内存来作为句柄池,reference对象存储的就是对象的句柄地址。句柄中包含了对象实例数据和类型数据的具体地址:
直接指针方式
reference对象直接存储对象地址:
两者对比
句柄
由于reference中存储的是稳定的句柄地址,在对象被移动时(如GC过程中的对象移动),只需改变句柄中实例数据指针,而reference本身不用动。
直接指针
速度快,节省了一次指针定位的时间开销。HotSpot采用此方式