java对象的访问_java对象访问定位的两种方式解析

大多数文章中都会列举如下两张图的内容但是解析不够详细在这里详细解释一下两张图的含义

基于句柄的内存定位方式

fd6b1e6c3240978cc8e4c5cd4b760c88.png

基于指针的内存定位方式

02d1411cb8e1352ccf370bf965967985.png

java栈是针对每一个线程的,每一个线程都会有自己的栈,维护在其内部的引用就是本地变量表。

在java中每一个reference只是指向了一个内存块,其中并没有实例对象的内容,因此可能会出现这种情况:同一个线程多个引用只想了同一个内存地址,不同线程的引用指向了同一个内存地址。

因此当gc进行内存清理时,若将在java堆中的对象进行了移动,那么对于基于指针的对象定位方式就需要将他内部的全部引用进行更新,更新次数较多。但是基于句柄的更新方式则不同,由于全部对象都指向了一个句柄,而句柄中维护了一个指向对象的指针,因此在进行内存整理时,只需要更新句柄中实例的内容就可以了。

当进行对象访问时,基于指针的对象定位方式可以直接获取到对象的内容,但是基于句柄的需要两步才能获取到对象内容,时间上有所损失。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值