对象访问方式
目前主流的访问对象的方式有两种:使用句柄和直接指针
1.通过句柄访问对象
如果是通过句柄的方式来访问对象,那么Java堆中就会划分出一块内存来作为句柄池。reference中存储的就是对象的句柄地址。句柄中包含了对象的实例数据和类型数据的具体地址信息。
优势: reference中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象)时只会改变句柄中的实例数据指正,而reference本身不需要进行修改。
2.通过直接指针访问对象
如果通过直接指针的方式来访问对象,那么Java堆对象的布局中就必须要考虑如何放置访问类型数据的相关信息,而reference中存储的直接就是对象的地址。
优势: 速度更快,它节省了一次指针定位的时间开销(使用句柄时,reference会先获取句柄池汇中两个指针,再通过句柄池中两个指针获取对象的实例数据和类型数据)。
参考:《深入理解Java虚拟机》