JVM如何定位到访问的对象

建立了对象后我们要使用对象,我们的java程序需要通过栈上的reference数据来操作堆上的实例后的对象。reference定义的数据类型在JVM中只规定了一个指向对象的引用,并没有指定这个引用通过什么方式去定位和访问堆中的对象的具体位置,所以对象的访问也是取决于虚拟机的实现而定的。目前主流的访问方式有使用句柄和直接指针两种。

使用句柄:

如果使用句柄访问的话,那么java堆将会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的地址信息,如下图所示:

优点:使用句柄的最大的好处就是reference中存储的时稳定的句柄地址,即的对象移动(例如GC垃圾回收时)时只会改变句柄中的书库数据的指针,reference本身不需要修改。

使用直接指针:

reference中存储的直接就是对象的地址,如下图所示:

优点:直接指针访问方式最大的好处就是速度快,他节省了一次指针定位的时间开销,但是由于对象会经常被访问,因此这项开销积少成多后也是一项非常可观的执行成本。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值