对象的访问方式

对象访问方式

        虽然定义的reference类型数据来作为对象内存数据的引用,但JVM规范没有定义这个引用应该通过何种方式定位、访问堆上的对象,也没有不强制规定对象的内部结构应当如何表示;    

        这些都取决于JVM的实现,目前主流的对象访问方式有两种:

(A)、使用句柄

       Java堆划分一块内存作为句柄池,reference中存储就是对象的句柄地址;

        对象句柄包含两个地址:

       (1)、在堆中分配的对象实例数据的地址;

       (2)、这个对象类型数据地址;    

        如图所示:

        优点:对象移动时(垃圾回收时常见的动作),reference不需要修改,只改变句柄中实例数据指针;                

(B)、使用直接指针

       reference中存储就是在堆中分配的对象实例数据的地址;

       而对象实例数据中需要有这个对象类型数据的相关信息(前面文章讨论了HotSpot使用对象头来存储对象类型数据地址);

        如图所示:

        优点:对象访问时节省了一次指针定位的时间开销,速度更快;

       由于对象访问非常频繁进行,所以能较好提升性能;


       HotSpot虚拟机使用了直接指针的方式访问对象;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值