JAVA对象访问

对象访问

Object obj = new Object();
Object obj 的语义会映射到java栈的本地变量表中 作为一个 reference(引用) 类型数据出现
而 new Object() 这部分语义将会反映到java堆中形成一块存储了Object类型所有数据值(Instance Date)的结构化内存 根据具体类型以及虚拟机实现的对象内存布局 (Object Memory Layout)的不同 这块内存的长度是不固定的 在java堆中还必须包含此对象数据类型 (如对象类型 父类 实现接口 方法等)的地址信息 这些类型数据存储在方法区中
reference(引用) 类型在虚拟机规范里值规定了一个对象引用 并没有定义这个引用应该通过哪种方法区定位 以及访问到对象具体位置 所以不同的虚拟机实现对象访问的方法有所不同 主流的有两种 句柄 和 直接指针

句柄访问:  JAVA堆中会划分出一开内存作为句柄池 存储的是对象句柄地址 包含了对象实例(JAVA堆的实例池) 和 类型数据具体地址信息(方法区)
直接指针:  java堆对象的布局必须考虑如何防止访问类型数据的相关信息 reference 中直接存储的就是对象地址

句柄访问访问优势: 在对象被移动时(垃圾收集时移动对象是非常普通的行为)只是会改变句柄中的实例数据指针而 reference 本身不需要被修改
直接指针访问的优势: 最大好处就是速度快 他节省了一次指针定位的时间开销 由于对象在java中访问非常频繁 因此这类开销积少成多以后也是非常可观的 Sun HotSpot是用直接指针访问的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值