在日常开发和面试中,经常会被问到 “Java 中对象是如何被创建的?”
表面上只是一个 new 关键字,但 JVM 在幕后完成了一系列复杂操作。
可以总结为以下 六大步骤

类加载检查 → 分配内存 → 内存清零 → 设置对象头 → 执行构造函数 → 引用赋值


一、类加载检查

当第一次创建某个类的对象时,JVM 会先检查这个类是否已经被加载:

  • 如果未加载,则通过 类加载器(ClassLoader).class 文件读入内存,并在方法区中生成对应的类信息。

  • 如果已加载,则直接进入下一步。

 这保证了类的元信息只会加载一次,所有对象实例共享同一份类描述信息。


二、分配内存

类信息已准备好后,JVM 会在 堆内存 中为新对象分配空间。
分配方式依赖于堆是否规整:

  • 指针碰撞(Bump-the-pointer):堆内存连续,指针往后挪即可。

  • 空闲列表(Free List):堆内存碎片化时,从空闲链表中找一块合适的内存。

 这一步决定了对象的物理存储位置。


三、内存清零

为了避免读取到脏数据,JVM 会将新分配的内存空间全部清零:

  • 数值型字段变为 0

  • 布尔型字段变为 false

  • 引用型字段变为 null

这是对象成员变量的默认初始化阶段。


四、设置对象头

JVM 会在新对象内存的起始位置写入 对象头 信息,包括:

  • Mark Word:保存哈希码、GC 年龄、锁状态等运行时数据

  • Klass Pointer:指向类的元信息,表明该对象属于哪个类

 这是对象和 JVM 交互的桥梁,GC 和锁机制都依赖它。


五、执行构造函数

完成上述底层准备后,JVM 才会调用构造方法:

  1. 先执行父类构造函数,确保继承链上的属性都得到初始化

  2. 按照声明顺序给实例变量赋初始值

  3. 执行构造方法体中的逻辑

 这一步才是程序员在代码中能感知到的初始化过程。


六、引用赋值

最后,新对象的引用会被返回,并赋值给栈帧中的局部变量表。
从这一刻开始,我们就可以通过引用来操作堆上的对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94206.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94206.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94206.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库优化提速(三)JSON数据类型在酒店管理系统搜索—仙盟创梦IDE

在 MySQL 中,JSONB 类型(MySQL 中实际为 JSON 类型,功能类似 PostgreSQL 的 JSONB,支持高效的 JSON 数据存储和查询)非常适合存储半结构化数据,例如酒店入住客人的复杂信息(包含客人基本信息、入…

小程序全局状态管理:使用MobX进行跨组件数据共享详解(九)

一、定义全局数据共享(又叫:状态管理)是为了解决组件之间数据共享的问题;全局数据共享方案:VueX、Redux、MobX等;二、小程序全局数据共享方案使用mobx-miniprogram配合mobx-miniprogram-bindings实现全局数…

生成模型 | DDPM -> Imrpoved DDPM -> DDIM

DDPM: Denoising Diffusion Probabilistic Models 采样过程中的迭代计算为: xt−11αt(xt−1−αt1−αˉϵθ(xt,t))β~tzx_{t-1} \frac{1}{\sqrt{\alpha_t}}(x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}}}\epsilon_{\theta}(x_t, t)) \sqrt{\tilde{\beta…

Linux驱动之DMA(三)

目录一、驱动内容1. 核心结构体解析2. 关键模块解析3. 驱动初始化流程4. 关键寄存器操作5. 典型工作流程6. 代码特点7. 重要函数列表8. 使用示例二、驱动中DMA的使用1. DMA通道初始化(imx_uart_dma_init)2. DMA发送流程(imx_uart_dma_tx&…

MongoDB 分片集群把非分片集合转成分片集合

记得关注一下博主,博主每天都会更新IT技术,让你有意想不到的小收获哦^_^ 文章目录*记得关注一下博主,博主每天都会更新IT技术,让你有意想不到的小收获哦^_^*一、MongDB集群启停止1、MonogoDB分片集群服务启动顺序(三台主机都要操作…

mybatis过渡到mybatis-plus过程中需要注意的地方

将 MyBatis 升级为 MyBatis-Plus(简称 MP)是一个平滑过渡的过程,因为 MP 是 MyBatis 的增强工具(而非替代),但仍有一些关键注意事项需要关注,以确保升级后功能兼容且能充分利用 MP 的特性&#…

openEuler系统中如何将docker安装在指定目录

在 openEuler 中,Docker 的默认数据存储目录为 /var/lib/docker(程序文件通常安装在系统默认路径,一般无需修改)。若需将 Docker 数据(镜像、容器、卷等)存储到指定目录,可通过修改 Docker 配置…

2.4 我国金融市场的监管体制

1、国务院金融发展委员会职责 2、中国人民银行职责

PHP - 实例属性访问与静态方法调用的性能差异解析

观察到了一个看似矛盾的现象:实例属性访问更快,但静态方法调用更快。这实际上是两种不同的操作,下面我将详细解释其中的原理和差异。1. 实例属性访问为什么快访问机制class MyClass {public $instanceProp 1; }$obj new MyClass(); $value …

音视频面试题集锦第 31 期

音视频面试题集锦第 31 期: 1、I 帧、P 帧和 B 帧的概念及区别?2、视频编码中的码率控制技术有哪些?3、音频采样参数有哪些?4、RTMP 和 HLS 协议各有什么特点?如何选择?5、WebRTC 中的 ICE、STUN、TURN 各…

企业视频库管理高效策略

内容概要本文全面探讨企业视频库管理的高效策略,旨在帮助组织优化视频资源处理。首先,我们将介绍企业视频库管理的基本概念和核心价值。接着,深入分析智能分类核心技术如何通过AI算法实现视频自动归类。之后,阐述云集成实现路径&a…

WebSocket和跨域问题

WebSocket 特点 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。简单来说,它就像是在客户端和服务器之间建立了一条"专用通道",双方可以随时主动发送消息给对方,而不需要像HTTP那样总是由客户端发起请求。 同一时间、双向…

微服务-19.什么是网关

一.网关曾经我们的项目是单体项目,前端只需要请求8080端口,就可以获取所有需要的数据和服务并进行渲染。但是拆分成微服务后,会面临几大问题:1.但是现在我们将该单体项目拆分成了微服务项目,每个项目都有自己独立的端口…

从字节码层面剖析以太坊智能合约创建原理

1. 引言 阅读完本文之后,将能理解一下字节码含义: 608060405260405160893803806089833981016040819052601e916025565b600055603d565b600060208284031215603657600080fd5b5051919050565b603f80604a6000396000f3fe6080604052600080fdfea2646970667358221…

typora无需激活版及最新激活版方法!双击安装就能用

介绍 Typora 是一款Markdown编辑器,支持实时预览,所见即所得。跨平台,支持Windows、macOS、Linux。适合写作、笔记、技术文档等。本教程将提供合法安全的安装方案,并解决常见问题,助你高效完成部署! 直接…

基于Java、GeoTools与PostGIS的对跖点求解研究

目录 前言 一、对跖点简介 1、地理学定义 2、人生哲学含义 二、对跖点求解 1、Java求解 2、Geotools求解 3、PostGIS求解 4、三种计算方法的对比 5、Leaflet展示对跖点 三、总结 前言 在地理信息系统(GIS)领域,对跖点(A…

Linux-函数的使用-编写监控脚本

Linux-函数的使用-编写监控脚本前言一、监控cpu二、采集内存的使用信息三、采集磁盘和分区的使用信息四、显示进程的信息前言 编写监控脚本实现以下功能 监控cpu,内存,磁盘,进程等信息,每隔5分钟记录这些信息到日志文件里perform…

Authelia:开源双因素认证与单点登录解决方案

项目标题与描述 Authelia是一个开源的认证和授权服务器,专注于为应用程序提供双因素认证(2FA)和单点登录(SSO)功能。通过Web门户,Authelia能够作为身份和访问管理(IAM)系统&#xff…

Apache Ozone 介绍与部署使用(最新版2.0.0)

目录 一、软件介绍 二、软件架构 Ozone Manager(OM) Storage Container Manager(SCM) Containers Datanodes Storage Containers Recon Recon 和 Ozone Manager Recon 和 Storage Container Manager 三、安装部署 准备…

Review --- Linux

Review — Linux Linux 是一种开源的类 Unix 操作系统内核,广泛应用于服务器、嵌入式设备和个人计算机中。其核心特点是开源、稳定、安全和高度的可定制性。对于大学毕业生而言,掌握 Linux 的基本操作和原理是进入 IT 行业的重要技能之一。 Linux 的基本…