对象访问会涉及到Java栈、Java堆、方法区这三个内存区域。

如下面这句代码:

1
Object objectRef = new Object();

假设这句代码出现在方法体中,”Object objectRef” 这部分将会反映到Java栈的本地变量中,作为一个reference类型数据出现。而“new Object()”这部分将会反映到Java堆中,形成一块存储Object类型所有实例数据值的结构化内存,根据具体类型以及虚拟机实现的对象内存布局的不同,这块内存的长度是不固定。另外,在java堆中还必须包括能查找到此对象类型数据(如对象类型、父类、实现的接口、方法等)的地址信息,这些数据类型存储在方法区中。

reference类型在java虚拟机规范里面只规定了一个指向对象的引用地址,并没有定义这个引用应该通过那种方式去定位,访问到java堆中的对象位置,因此不同的虚拟机实现的访问方式可能不同,主流的方式有两种:使用句柄和直接指针。

句柄访问方式:java堆中将划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据和类型数据各自的具体地址信息。

指针访问方式:reference变量中直接存储的就是对象的地址,而java堆对象一部分存储了对象实例数据,另外一部分存储了对象类型数据。

这两种访问对象的方式各有优势,使用句柄访问方式最大好处就是reference中存储的是稳定的句柄地址,在对象移动时只需要改变句柄中的实例数据指针,而reference不需要改变。使用指针访问方式最大好处就是速度快,它节省了一次指针定位的时间开销,就虚拟机而言,它使用的是第二种方式(直接指针访问)。

本系列:

  • Java虚拟机学习(1):体系结构 内存模型
  • Java虚拟机学习(2):垃圾收集算法
  • Java虚拟机学习(3): 类加载机制
  • Java虚拟机学习(4):JDK可视化监控工具
  • Java虚拟机学习(5):内存调优
  • Java虚拟机学习(6):对象访问

关于作者: liuchi1993

from: http://www.importnew.com/22245.html

Java虚拟机学习(6):对象访问相关推荐

  1. Java虚拟机学习(7):对象内存分配与回收

    对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...

  2. Java 虚拟机学习笔记 | 类加载过程和对象的创建流程

    前言 创建对象是 Java 语言绕不开的话题,那么对象是如何创建出来的呢?我们今天就来聊一聊.对象创建第一步就是检查类是否加载,而类的加载又牵扯到类的加载过程.如果单说对象的创建而绕开类的加载过程,感 ...

  3. Java虚拟机学习(8):查看JVM参数及值的命令行工具

    查看JVM各个参数值方式 1. HotSpot vm中的各个globals.hpp文件  查看jvm初始的默认值及参数 globals.hpp globals_extension.hpp c1_glo ...

  4. Java虚拟机学习(3): 类加载机制

    类加载机制 JVM把class文件加载的内存,并对数据进行校验.转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制. 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命 ...

  5. java虚拟机学习-JVM调优总结-新一代的垃圾回收算法(11)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  6. java虚拟机学习(四)类的加载过程

    2019独角兽企业重金招聘Python工程师标准>>> 类从虚拟机内存加载到从内存卸载,经历的生命周期是:加载,验证,准备,解析,初始化,使用,卸载这几个阶段, 其中验证,解析,初始 ...

  7. Java虚拟机学习(5):内存调优

    JVM调优主要是针对内存管理方面的调优,包括控制各个代的大小,GC策略.由于GC开始垃圾回收时会挂起应用线程,严重影响了性能,调优的目是为了尽量降低GC所导致的应用线程暂停时间. 减少Full GC次 ...

  8. Java虚拟机学习(2):垃圾收集算法

    跟踪收集器 跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC  Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC  Roots 没有 ...

  9. Java虚拟机学习(1):体系结构 内存模型

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代" ."非堆",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共享的内 ...

最新文章

  1. 独家 | 在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)
  2. SQL Server 2012 Express LocalDB
  3. MySQL中一个双引号错位引发的血案
  4. AV1,实时编码READY
  5. redis stream持久化_一文了解:Redis的RDB持久化
  6. mynewt 编译环境搭建
  7. Linux下memcache的安装和启动(很好)
  8. android eclipse不能创建activity,在eclipse里面开发android应用,不能新建Activity
  9. python随机数调用
  10. xp计算机无法正常启动,Windows XP电脑开机出错无法正常启动的解决方法
  11. nals\string-trim.js Replace Autoprefixer browsers option to Browserslist config. Use browserslis
  12. codeblocks 编译器设置方法 也可以酱紫滴
  13. 【全网详解】从0到1搭建双十一实时交易数据展示平台——Spark+Kafka构建实时分析系统
  14. 用c语言做记忆测试小游戏,用C语言实现简单小游戏
  15. Sms开源短信及消息转发器,不仅只转发短信,备用机必备神器
  16. linux输入数字切换浏览器tab,js监听浏览器tab窗口切换
  17. ORACLE考试例题
  18. 如何解读《微信技术总监谈架构:微信之道——大道至简》
  19. u盾显示服务器没有收到,【江苏银行信用卡】江苏银行企业版U盾插上去显示服务器没有收到您的证书,但在别人电脑上可以使用 - 信用卡吧...
  20. 计算机功能区各部分,Win8.1资源管理器窗口各部分名称是什么(适于Win8)?

热门文章

  1. 研磨设计模式之 策略模式--转
  2. 数学建模学习笔记——图论最短路径
  3. 微软亚洲研究院刘铁岩博士:迎接深度学习的“大”挑战(一)
  4. 灰度图像--图像增强 Robert算子、Sobel算子
  5. 实战SSM_O2O商铺_30【商品】商品添加之Controller层的实现
  6. Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
  7. Centos显示-bash-4.1$问题的修复及原因探究
  8. 判断均匀平面波的极化形式_测瑞通|怎样判断电波暗室的性能?
  9. 系统优化怎么做-SQL优化
  10. python线程池超过最大数量_python自定义线程池控制线程数量