创建对象是为了访问对象,Java程序通过栈的引用(reference)数据来操作堆上的对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用。并没有规定通过该引用怎么定位,访问堆中的对象。具体需要看虚拟机的实现。

两种访问方式:

  • 句柄访问
  • 直接访问

句柄访问

Java堆中会划分一个句柄池,reference存储的就是对象的句柄地址,而句柄中存放的是对象的实例数据和类型数据的地址信息。

直接访问

Java堆对象布局就必须考虑如何存放访问类型数据的相关信息,reference存储的就是对象的地址。

句柄访问和直接访问的特点

  • 句柄访问:reference存放的是句柄地址(比较稳定),在对象移动时(垃圾回收),只会改变句柄中实例数据的地址,而reference无需改变。
  • 直接访问:由于节省了一次指针开销访问速度比较快,由于对象的访问在Java堆上访问特别频繁。Sun HotSpot虚拟机采用的是直接访问。

JAVA的对象访问定位相关推荐

  1. java对象的访问定位_2、JVM-Java对象的创建、对象结构、对象访问定位-Go语言中文社区...

    目录 记录下来方便个人学习复习 注:根据new的参数在常量池中定位一个类的符号引用 --这句话的意思是:常量池相当于c语言中的指针地址集合,所以就是在常量池中保存new对象的地址,通过地址定位对象在堆 ...

  2. 关于虚拟机中对象访问定位的两种方式的一些思考

    前言 本文是在周志明老师经典作品<深入理解Java虚拟机>第二章第三节的基础上对句柄和直接指针两种对象访问方式的深入思考,有不准确的地方希望读者不吝赐教. JVM中访问对象的两种方式 1. ...

  3. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解

    本文实例讲述了深入理解JVM之Java对象的创建.内存布局.访问定位.分享给大家供大家参考,具体如下: 对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含 ...

  4. 【深入理解JVM】:Java对象的创建、内存布局、访问定位

    对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含的主要过程包括了类加载检查.对象分配内存.并发处理.内存空间初始化.对象设置.执行ini方法等. 主要流 ...

  5. 0x00000000指令引用的内存不能为written_JVM03——对象实例化,内存布局,访问定位...

    从字节码角度看对象的创建过程 public class ObjectTest { public static void main(String[] args) { Object obj = new O ...

  6. 欧尼酱讲JVM(18)——对象实例化内存布局与访问定位

    目录 对象的实例化 创建对象的几种方式 从字节码角度看对象的创建过程 对象创建的六个步骤 第一步:判断对象对应的类是否加载.链接.初始化 第二步:为这个对象分配内存 第三步:处理并发安全问题 第四步: ...

  7. JVM篇--详解对象创建过程-对象结构-对象访问方式

    hello,hello,刚学过的东西瞬间忘记,是我年龄大了还是年龄大了,可我明明才20出头啊(凑不要脸),其实25了,偏题了....今天整理一下关于JVM对象篇的结构,会记录对象创建过程,还有对象的内 ...

  8. Java对象的创建、内存布局和访问定位

    在Java运行时数据区中,我们知道了虚拟机内存的概况,本文介绍虚拟机内存中的数据的其它细节,如对象如何创建.如何布局以及如何访问. 基于实用的原则,这里以HotSpot虚拟机和常用的内存区域Java堆 ...

  9. JVM运行时结构、Java内存管理、JVM实例、HotSpot VM对象的创建、内存布局和访问定位

    1.JVM运行时结构 Java 运行时数据区域有程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区.其中前三个线程私有,随线程生而生,线程灭而灭:后面两个是线程间共享. 1.1 程序计数器 ...

最新文章

  1. 用AI创造AI,人工智能无代码时代来临
  2. curl参数为多维数组时提示数组到字符串的转换问题
  3. 在.NET Core 中使用 FluentValidation 进行规则验证
  4. Visual Studio 配色方案
  5. 总裁导航V2.5.0-秒收录网站
  6. 易经读书笔记18山风蛊
  7. 理解AOP思想(面向切面编程)
  8. OpenAI Gym 是一个优秀开发和比较强化学习算法的工具
  9. 【AtCoder】ARC065
  10. 小程序-Hello World
  11. 安卓手机内存满了,4个方法教你释放空间
  12. 深度操作系统 V15.11发布——心随意动 畅享云端
  13. 加密狗工作原理和破解方法简介
  14. query归一 同义词挖掘
  15. linux下编译opencv的无kuda版本,自定义路径
  16. 如何建立自己的【渲染农场】终极指南(2)
  17. jquery—addClass方法和removeClass方法
  18. SSL生成证书的几种方式
  19. java 7 锁优化_自Java 6/Java 7开始,Java虚拟机对内部锁的实现进行了一些优化。这些优化主要包括锁消除(Lock Elision)、锁粗化(Lock Coarse...
  20. 阿里云验证码与通知短信

热门文章

  1. C中的预编译宏定义-转
  2. 蓝桥杯 ALGO-87 算法训练 字串统计
  3. SQL命令向表中添加列
  4. L2-010. 排座位-PAT团体程序设计天梯赛GPLT(并查集)
  5. Java 用HTTP的方式发送JSON报文请求
  6. 关于用Linux桌面版当工作系统这件事
  7. STM32系列 STM32F4xx 独立看门狗(IWDG)
  8. Hibernate持久化对象的三种状态深入理解
  9. 如何加密 Ubuntu 安装后的主文件夹
  10. 使用Spark Streaming进行情感分析