java虚拟机中指定一个栈内存的引用指向了堆内存中的对象。这样说只是笼统的说法。而指向堆内存中的对象就一定是栈引用所需要的那个对象吗?其实并不定。

这就需要知道对象的访问定位方式有两种:

  1.使用句柄。所谓的句柄其实就是堆内存中分配一块内存记录对象实例的指针和对象类型数据的指针,而对象类型数据区域是在方法区中的。这样栈引用第一步先指向堆中

  的句柄。第二步根据句柄中的对象实例的指针和对象类型数据的指针找到对应的对象实例和其类型数据。虽然这里用了两步,必然对于使用直接指针来说,效率必然会慢。因为

  这里经过两步才找到对应的对象实例和其类型数据。但是这样的好处就是如果对象实例和其类型数据的指针变动很频繁,变动的只是堆中的句柄,而栈的引用却不用变动。

  2.使用直接指针:直接指针就是,在栈引用中直接根据对象实例的指针和对象类型数据的指针找到对应的对象实例和其类型数据。只需要用一步就可以找到对应的对象实例和其类型数据。

  对于很多对象的 访问定位来说,减少了一次寻址,这必然效率很高,性能很好。

 

 

HotSpot虚拟机则是使用直接指针的方式对对象的访问定位。

相关文章:

  • 2021-12-03
  • 2021-09-11
  • 2021-04-13
  • 2021-10-15
  • 2022-12-23
  • 2021-07-09
  • 2021-04-24
猜你喜欢
  • 2021-11-01
  • 2021-10-19
  • 2021-04-07
  • 2021-09-20
  • 2021-06-18
  • 2021-09-10
  • 2021-06-05
相关资源
相似解决方案