对象是如何访问的?
通过栈上的对象引用来访问对象。
引用是如何来访问java堆中的对象的呢??
主要看具体的虚拟机怎么实现,主流的有两种:
1.句柄访问:在java堆中国划分一部分内存存储句柄的句柄池,引用类型存的是指向该句柄池的地址,然后造句柄池中对应 保存着实例对象的地址
优点:在实例对象发生移动时候(垃圾回收器回收对象,实例对象移动很正常)
就可以只改变句柄池中对应具体的实例对象的的地址即可,而不用改变栈中的引用数据的值
2.直接指针:引用数据直接保存着实例对象的地址(HotSpot所使用的)
优点:速度快,对象的访问很频繁,直接定位减少了一次指针定位的开销(定位句柄),从而积少成多,在提升访问性能上做出的效果也是极其可以的