对象的访问定位(使用句柄,直接指针)
1.使用句柄
如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中
存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信
息
2.直接指针
如果使用直接指针访问,那么Java堆对象的布局中就必须考虑如何放置访问类型数据的
相关信息,而reference中存储的直接就是对象地址
**
这两种对象访问方式各有优势,使用句柄来访问的最大好处就是reference中存储的是稳
定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中
的实例数据指针,而reference本身不需要修改。
使用直接指针访问方式的最大好处就是速度更快,它节省了一次指针定位的时间开销,
由于对象的访问在Java中非常频繁,因此这类开销积少成多后也是一项非常可观的执行成
本。 就本书讨论的主要虚拟机Sun HotSpot而言,它是使用第二种方式进行对象访问的,但从
整个软件开发的范围来看,各种语言和框架使用句柄来访问的情况也十分常见
**
对象实例数据:是指基于某个类new出来的一个或多个具体实例,实例要访问它对应的类信息时通过一个指针指向另一个保存类型信息的内存区
对象类型数据:应该是指class类信息,定义了一个类的元数据、它包含的成员,因为它是存储在方法区的
方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、 常量、 静态变量、
即时编译器编译后的代码等数据
,