一、对象创建过程

在Java语言中,对象是如何访问的呢?对象访问在Java语言中无处不在,是最普通的程序行为,但即使是最简单的访问,也会涉及Java虚拟机栈Java堆区方法区

对于下面这行代码,

Object obj = new Object();

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


二、对象访问方式

主流的两种访问方式:使用句柄和直接指针。

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

使用直接指针方式:Java堆对象的布局中就必须考虑如何放置访问类型数据的相关信息,reference中直接存储的就是对象地址。

这两种对象的访问方式各有优势,使用句柄访问方式的最大好处就是reference中存储的是稳定的句柄地址,在对象被移动时只会改变句柄中的实例数据指针,而reference本身不需要被修改。

使用直接指针访问方式的最大好处就是速度更快,它节省了一次指针定位的时间开销。Sun HotSpot虚拟机使用的是这种方式。

JVM(4)——对象访问相关推荐

  1. JVM:对象的实例化、内存布局与访问定位

    对象的实例化 创建对象的方式 new关键字 最常见的方式 变形1:Xxx的静态方法(单例模式) 变形2:XxxBuilder/XxxFactory的静态方法 Class的newInstance() 反 ...

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

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

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

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

  4. [jvm]对象访问机制

    本文原文链接:http://blog.csdn.net/java2000_wl/article/details/8015105 转载请注明出处! 图画的还不错 对象访问会涉及到Java栈.Java堆. ...

  5. [转载] JVM中对象的回收过程

    参考链接: JVM是否创建Main类(具有main()的类)的对象 当我们的程序开启运行之后就,就会在我们的java堆中不断的产生新的对象,而这是需要占用我们的存储空间的,因为创建一个新的对象需要分配 ...

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

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

  7. 【JVM】对象存活判定算法、GC算法、STW、GC种类详解

    [JVM]对象存活判定算法.GC算法.STW.GC种类详解 文章目录 [JVM]对象存活判定算法.GC算法.STW.GC种类详解 GC主要关注的区域 垃圾标记阶段:对象存活判断 标记阶段:引用计数算法 ...

  8. 11 控制对象访问:代理模式

    1.引入 1.0 联系JAVA知识 Java中的  动态代理 和 静态代理  这两个知识点也就是代理模式的知识点. 1.1 需求引入 接着第10张 状态模式的例子接着向下进行: 糖果机已经可以取得糖果 ...

  9. 理解JVM中对象与垃圾回收机制

    目录 一.虚拟机中对象的创建过程 1.检查加载 2.分配内存 3.内存空间初始化 4.设置(主要是对象头信息) 5.对象初始化 二.对象的内存布局 三.对象的访问定位 四.判断对象存活 五.各种引用 ...

最新文章

  1. 程序员因重复记录日志撑爆ELK被辞退!
  2. Effective C#: Item 1 Always use properties instead of accessible data members
  3. Webpack入门教程三
  4. boost::log::settings用法的测试程序
  5. Sql中存储过程的定义、修改和删除操作
  6. 线上防雪崩利器——熔断器设计原理与实现
  7. MySQL的一些简单语句
  8. $.ajax() IE 兼容问题
  9. 热烈庆祝《大数据》成功入选中国科技核心期刊目录~
  10. 安居客 Android 项目架构演进
  11. 表的增删改查(一)(MySQL)
  12. C语言程序怎么解决数独,数独解法解决方法
  13. 怎样刻录系统启动光盘
  14. l13Nginx创建负载均衡
  15. 显示Java国家列表
  16. 解决Android在更新安装包时出现“未安装应用”的情况
  17. 1500ml等于多少l_1500毫升是多少升
  18. 机器学习之——什么是Onehot编码?
  19. 《Redis设计与实现》笔记|SDS动态字符串|链表字典跳跃表整数集合压缩列表结构|redis中的对象|数据库原理|RDB持久化|AOF持久化|事件与多路利用模型|发布订阅原理|事务原理|慢查询日志
  20. 想要搭建建基于Nodejs的网站怎么做

热门文章

  1. (7)3分钟搞定 C# 逻辑运算
  2. sdram 时钟相位_零基础学FPGA (二十五)必会! 从静态时序分析到SDRAM时序收敛(下篇)...
  3. 女朋友掉水里,各类程序猿怎么救?
  4. 不懂这25个名词,好意思说你懂大数据?
  5. Android 页面布局xd,Adobe XD强大的布局系列工具 助你事半功倍
  6. ubuntu 新增mysql用户_Ubuntu中给mysql添加新用户并分配权限
  7. jmeter测试java服务_Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能
  8. tankwar java_TankWar 单机(JAVA版) 版本0.3 画出坦克
  9. php 如何生成exe文件怎么打开,如何把PHP转成EXE文件
  10. gesturedetector.java_android使用gesturedetector手势识别示例分享