对象的访问定位

主流的访问方式主要有句柄直接指针两种从虚拟机栈上访问堆上的对象数据

1. 通过句柄访问对象

如果使用句柄访问,Java堆会划分出一块内存作句柄池;
reference中存储的就是对象的句柄地址;
而句柄中包含了对象实例数据与类型数据各自的具体地址信息:

句柄访问

优缺点:
缺点: 句柄方式,使用代理,访问速度慢一点;
优点: 不用频繁修改指针(gc回收对象,实例对象移动很正常);

2. 通过直接指针访问对象

栈中引用数据, 直接保存着堆内存中实例对象的地址(HotSpot所使用的)
java堆对象须考虑如何放置访问类型数据信息,而reference中存储的直接就是堆内存的对象地址;
直接指针访问
优缺点:
优点: 速度快, 对象的访问很频繁,直接定位减少了一次指针定位的开销(定位句柄),从而积少成多,在提升访问性能上做出的效果也是极其可以的
缺点: 堆内存中对象内存地址变化后, 需要频繁修改指针


丰木
325 声望21 粉丝

遇见超乎想象的自己!