详解Java对象创建的过程及内存布局

 更新时间:2021年06月04日 17:24:19   作者:阳光大男孩!  
今天给大家带来的文章是Java对象创建的过程及内存布局,文中有非常详细的图文示例及介绍,需要的朋友可以参考下

一、对象的内存布局

对象头

对象头主要保存对象自身的运行时数据和用于指定该对象属于哪个类的类型指针

实例数据

保存对象的有效数据,例如对象的字段信息,其中包括从父类继承下来的。

对齐填充

对齐填充不是必须存在的,没有特别的含义,只起到一个占位符的作用。

二、对象的创建过程

实例化一个类的对象的过程是一个典型的递归过程。

在准备实例化一个类的对象前,首先准备实例化该类的父类,如果该类的父类还有父类,那么准备实例化该类的父类的父类,依次递归直到递归到Object类。

此时,首先实例化Object类,再依次对以下各类进行实例化,直到完成对目标类的实例化。具体而言,在实例化每个类时,都遵循如下顺序:

1.先依次执行实例变量初始化和实例代码块初始化

2.执行构造函数初始化。也就是说,编译器会将实例变量初始化和实例代码块初始化相关代码放到类的构造函数中去,并且这些代码会被放在对超类构造函数的调用语句之后,构造函数本身的代码之前。

三、对象访问定位

Java程序需要通过栈上的引用数据来操作堆上的具体对象。

对象的访问方式取决于虚拟机实现,目前主流的访问方式有使用句柄和直接指针两种。

句柄,可以理解为指向指针的指针,维护指向对象的指针变化,而对象的句柄本身不发生变化;指针,指向对象,代表对象的内存地址。

句柄

Java堆中划分出一块内存来作为句柄池,引用中存储对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。

对象类型数据是被虚拟机加载的类信息。

在这里插入图片描述

直接指针

直接指针方式中,并没有划分句柄池,引用中存储的直接就是对象地址。

在这里插入图片描述

四、参考

周志明,《深入理解Java虚拟机》

到此这篇关于详解Java对象创建的过程及内存布局的文章就介绍到这了,更多相关Java对象创建及内存布局内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决springboot读取application.properties中文乱码问题

    解决springboot读取application.properties中文乱码问题

    初用properties,读取java properties文件的时候如果value是中文,会出现乱码的问题,所以本文小编将给大家介绍如何解决springboot读取application.properties中文乱码问题,需要的朋友可以参考下
    2023-11-11
  • springboot html调用js无效400问题及解决

    springboot html调用js无效400问题及解决

    这篇文章主要介绍了springboot html调用js无效400的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Springboot根据配置文件动态注入接口实现类详解

    Springboot根据配置文件动态注入接口实现类详解

    这篇文章主要介绍了Springboot根据配置文件动态注入接口实现类详解,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 详解SpringBoot中如何使用Reactor模型

    详解SpringBoot中如何使用Reactor模型

    Reactor模型主要提供了一种在Java虚拟机上构建非阻塞应用的方式,这种方式使用了响应式编程原理,通过响应式流标准来实现,下面我们就来看看它在SpringBoot中是如何使用的吧
    2024-04-04
  • java实战之猜字小游戏

    java实战之猜字小游戏

    这篇文章主要介绍了java实战之猜字小游戏,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助呦,需要的朋友可以参考下
    2021-04-04
  • Spring Data Jpa的四种查询方式详解

    Spring Data Jpa的四种查询方式详解

    这篇文章主要介绍了Spring Data Jpa的四种查询方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java中实现excel合并单元格详细代码实例

    java中实现excel合并单元格详细代码实例

    最近的工作中,遇到一个需求在生成的Excel表格后需要在尾部添加一个合并的单元格数据,这篇文章主要给大家介绍了关于java中实现excel合并单元格的相关资料,需要的朋友可以参考下
    2024-06-06
  • Java Collections.sort()实现List排序的默认方法和自定义方法

    Java Collections.sort()实现List排序的默认方法和自定义方法

    这篇文章主要介绍了Java Collections.sort()实现List排序的默认方法和自定义方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2017-06-06
  • mybatis plus乐观锁及实现详解

    mybatis plus乐观锁及实现详解

    这篇文章主要为大家介绍了mybatis plus乐观锁及实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • java如何用递归方法求阶乘

    java如何用递归方法求阶乘

    这篇文章主要介绍了java 用递归方法求阶乘的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论