java根据变量名找对象_不会找对象?教你两招再试试【适用于Java攻城狮】

我是标题党我先摊牌了,但不影响你因此受益!

一个简洁高效纯输出 360° Java 知识点的博主怎能让你受委屈!不信继续往下看

new 出的对象先由 JVM 进行创建并初始化,此过程完成前的最后一步是将此对象的引用入栈,虚拟机栈中就有了它的对象引用,之后对此对象的引用相关操作均由虚拟机栈发起,并根据此对象引用内记录的信息定位至堆中具体对象完成具体处理

虚拟机栈中的引用如何定位至堆中的具体对象实例?你已经知道了通过指针记录堆内对象地址的方式完成定位,没错,这确实是其中的一种,实际上这种方式称为直接指针定位, 也是 HotSpot 虚拟机 采用的对象定位策略。但不同虚拟机实现此功能的策略并不相同,今天我们具体的聊聊常见的两种,即:直接指针找对象、句柄池找对象,让你心里透亮透亮

若您有遇到其它相关问题,非常欢迎在评论中留言,本人及全体读者小伙伴们将帮助解决并持续更新至此文,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!

直接指针找对象

根据直接指针定位对象是指VM创建完成此对象之初,对象内直接存入对应的堆内地址,之后再将对象入栈。根据此堆内地址,当虚拟栈中对应的对象引用被调用完成某些数据处理时,可直接完成堆内对象定位,优势显而易见是直接高效,同时也是 HotSpot 虚拟机 采用的对象定位策略

e10fc3092a00869455ce61219b62b079.png

句柄池找对象

划分句柄池定位堆内对象是另一种常见方式,是指VM在堆中划分出来并维护一块专门的内存,用于存储句柄,句柄中存储有 Method Area Point(类数据信息指针)和 Instance Data Point(实例数据指针),句柄通过这两个指针可以获取所需数据。而虚拟机栈内的对象引用此时存储的就是句柄池内对应的句柄地址,由此种方式完成对象定位的优势是当堆内对象被移动时,只需改变句柄池中对应的 Instance Data Point(实例数据指针),不需要更新此对象定位用到的其它相关指针,

4b1b971349aecde62c7f2ad37b9fbce7.png

若您有遇到其它相关问题,非常欢迎在评论中留言,我和其他读者小伙伴们将帮助解决并持续更新至此文,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!

bea50647328cc104c3840e29034c38a8.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值