APP下载
报价宝  ›  科技  › 

Java虚拟机器器值物件访问以及如何使用物件的引用(2)

报价宝 来源:baojiabao.com 发布时间:2019-10-18 09:53:00 10月26日更新
报价宝综合消息Java虚拟机器器值物件访问以及如何使用物件的引用(2)

作者:徐刘根

来源:https://blog.csdn.net/xlgen157387/article/details/45045575

物件访问在 Java 语言中无处不在,是最普通的程式行为,但即使是最简单的访问,也会却涉及 Java 栈、 Java 堆、方法区这三个最重要内存区域之间的关联关系,如下面的这句程式码:

Object obj = new Object();

我们知道在Java栈中储存的是物件的引用,在Java堆中才是具体new出来的物件实体,根据具体型别以及虚拟机器实现的物件内存布局( Object Memory Layout)的不同,这块内存的长度是不固定的。

另外,在 Java 堆中还必须包含能查询到此物件型别资料(如物件型别、父类、 实现的界面、方法等)的地址资讯,这些型别资料则储存在方法区中。

既然java栈中的是物件的引用,那么我们如何使用物件那,主流的访问方式有两种:使用控制代码和直接指标。

(1)使用控制代码:

如果使用控制代码访问方式, Java 堆中将会划分出一块内存来作为控制代码池,reference 中储存的就是物件的控制代码地址,而控制代码中包含了物件例项资料和型别资料各自的具体地址资讯,如图:

(2)直接指标

如果使用直接指标访问方式, Java 堆物件的布局中就必须考虑如何放置访问型别资料的相关资讯, reference 中直接储存的就是物件地址,如图:

这两种物件的访问方式各有优势,使用控制代码访问方式的最大好处就是 reference 中储存的是稳定的控制代码地址,在物件被移动(垃圾收集时移动物件是非常普遍的行为)时只会改变控制代码中的例项资料指标,而 reference 本身不需要被修改。

使用直接指标访问方式的最大好处就是速度更快,它节省了一次指标定位的时间开销,由于物件的访问在 Java 中非常频繁,因此这类开销积少成多后也是一项非常可观的执行成本。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 手机价格 笔记本价格 笔记本电脑价格 电视机价格