跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
低温漂电阻捷比信 · 专业器件主题站

漫画:如何找到物体?处理还是直接指针?

提示:要使用和定位Java对象,您需要使用Java虚拟机堆栈(Java Virtual Machine Stack),它描述了Java方法执行的线程内存模型:执行每个方法时,Java虚拟机的堆栈框架为同步创建以存储诸如局部变量表,操作数堆栈,动态连接,方法退出等信息。从调用每种方法到执行完成的过程与从虚拟中压入到弹出的堆栈帧的过程相对应。机器堆栈。代码解释以下面的代码为例来说明对象定位的过程: private& nbsp; String& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; private& nbsp; String& nbsp; color;& nbsp;& nbsp;& nbsp;公共汽车(String& nbsp; code,& nbsp; String& nbsp; color)& nbsp; {& nbsp;& nbsp;& amp; ; nbsp;& nbsp;& nbsp;& nbsp;& nbsp; this.code& nbsp; =& nbsp; code; & nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; this.color& nbsp; =& nbsp; color;& nbsp;& ; }      // 省略其他方法。 ..}公共类  ReferenceTest  {& nbsp;& nbsp;& nbsp;& nbsp; myBus& nbsp; =& nbsp;新的 公共汽车(“ Java中文社区”,“蓝色”);}具有官方默认的HotSpot对于虚拟机,myBus是存储在本地变量表中的引用类型变量,而新的Bus( “ Java中文社区”,“蓝色”)是存储在Java堆中的对象实例数据,该对象实例数据存储该实体类的所有字段信息,例如code =“ Java中文社区”和“ ;和颜色=“蓝色”等信息,并且对象类型数据的地址也存储在Java堆中,该Java堆存储对象类型信息及其父类型信息等。由于“ Java虚拟机规范”中的引用类型为仅指定它是对对象的引用,未定义应如何定位该引用以及如何访问堆中该对象的特定位置,因此,对象访问方法也取决于虚拟对象的实现。在机器上,主流的访问方法主要包括句柄和直接指针的使用:如果使用句柄访问,则可能将Java堆中的一块内存分配为句柄池,并且存储在对象中的引用就是该句柄的句柄。目的。地址,句柄中包含对象实例数据和类型数据的特定地址信息;如果使用直接指针访问,则对象在Java堆中的内存布局必须考虑如何放置与访问类型数据有关的信息,并将直接存储在引用中是对象的地址。如果仅访问对象本身,则不需要其他间接访问。因此,使用句柄访问的最大好处是引用存储了稳定的句柄地址。当对象被移动时(在垃圾回收期间移动对象是很常见的行为),只有句柄中的实例数据指针被更改,并且引用本身不需要修改。使用直接指针访问速度更快,但是如果移动了对象,则需要修改引用本身。由于在Java中对象访问非常频繁,因此此类开销的累积也是极其可观的执行成本。因此,官方默认的HotSpot虚拟机使用“直接指针”。定位对象。参考书目致谢周志明的“深入了解Java虚拟机”第三版特别推荐一种高质量的内容共享架构+算法。对于那些还没有关注的人,您可以长按以关注它:长按以订阅更多令人兴奋的内容▼单击一个观看,向您表示诚挚的感谢