Java对象创建过程的解析

Java对象创建过程的解析

    • 1. 类的加载与连接
    • 2. 内存分配
      • 2.1 分配方式
      • 2.2 本地线程缓冲分配(TLAB)
    • 3. 初始化内存
    • 4. 设置对象头


💖The Begin💖点点关注,收藏不迷路💖

对象的创建是一个涉及多个步骤的复杂过程,但我们可以将其简化为几个核心环节来理解。

1. 类的加载与连接

当JVM(Java虚拟机)遇到一条新建对象的指令时,它首先会检查这条指令所引用的类是否已经被加载。

类的加载是类加载器(ClassLoader)的任务,它负责将类的二进制数据从硬盘加载到JVM的方法区中,并在内存中生成对应的java.lang.Class对象。类的加载之后,会进行连接(包括验证、准备和解析)等阶段,确保类的正确性并准备好类的信息。

2. 内存分配

2.1 分配方式

  • 指针碰撞(Bump the Pointer):适用于内存规整的情况,即已用内存和未用内存界限分明,分配内存时只需将指针向空闲内存方向移动即可。
  • 空闲列表(Free List):适用于内存不规整的情况,JVM会维护一个记录空闲内存块的列表,分配内存时从列表中查找合适的空闲块。

2.2 本地线程缓冲分配(TLAB)

==为了提高内存分配的效率,JVM通常使用本地线程缓冲分配(Thread Local Allocation Buffer, TLAB)的方式。==每个线程在Java堆中预先分配一小块内存,称为TLAB。线程在分配小对象时,会优先在自己的TLAB中进行,这样可以减少线程间的同步开销,提高内存分配的效率。

3. 初始化内存

分配好内存后,JVM会将分配到的内存空间(除了对象头)初始化为零值。这是为了确保对象的字段在未被显式初始化之前有一个确定的初始状态。

4. 设置对象头

对象头是对象内存布局的一部分,它包含了对象的元数据信息,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。在内存分配并初始化后,JVM会设置对象头的这些信息,以便后续对对象进行管理和操作。

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

Qt:26.Qt项目:贪吃蛇游戏

一、项目功能演示: 开始界面可以点击进入游戏。 点击进入游戏之后,切换到选项界面,该界面可以选择游戏难度,回退,以及查询最近一次游戏得分。 游戏具体界面如下。贴图啥的可以自己换,本人审美不咋行&#x…

[SUCTF 2019]EasySQL1

这是一个简单的SQL注入题,但是因为我的SQL基础约等于0,所以做起来很难。 首先试试引号是否被过滤 可以看到单引号、双引号都被过滤了,试试其他的盲注都不行,基本上可以确定不能用这种方法。 在测试的过程中发现,输入…

RICHTEK立锜科技 WIFI 7电源参考设计

什么是WIFI 7? WiFi 7(Wi-Fi 7)是下一代Wi-Fi标准,对应的是IEEE 802.11将发布新的修订标准IEEE 802.11be –极高吞吐量EHT(Extremely High Throughput )。Wi-Fi 7是在Wi-Fi 6的基础上引入了320MHz带宽、4096-QAM、Mu…

oceanbase架构、功能模块、数据存储、特性、sql流转层等概念详解

一、架构图 OceanBase 数据库采用无共享(Shared-Nothing)分布式集群架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,运行在普通 PC 服务器组成的集群之上,具备高可扩展性、高…

cephrgw元数据和数据布局

提示:每个rados object有如下几个组成部分,分别是omap(omapheader、omapkey、omapval)、xattr、data,相关的CLI command rados getomapheader {radosobjectname} -p {poolname} [--namespace{ns}] rados listomapkeys…

Eureka基本概念

Eureka基本概念 Eureka基本概念 一、服务消费者如何获取服务提供者的信息? 不管是消费服务者还是消费提供者,都是服务,服务启动之后会注册到eureka的注册中心去,当服务消费者请求调用某个服务的时候,会根据eureka注册…

【LabVIEW作业篇 - 4】:属性节点赋值和直接节点赋值的区别体现

文章目录 属性节点赋值和直接节点赋值的区别体现 属性节点赋值和直接节点赋值的区别体现 创建5个圆形指示灯,然后循环点亮,先给圆形指示灯赋值假变量,然后再进行循环。 运行结果,观察结果,发现刚开始运行时&#xff0…

引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini

GPT-4o mini的成本比GPT-3.5 Turbo低了超过60%,其聊天表现优于Google的Gemini Flash和Anthropic的Claude Haiku。该模型从周四开始对ChatGPT的免费用户、ChatGPT Plus用户和团队订阅用户开放,并将在下周向企业用户开放。OpenAI计划未来将图像、视频和音频…

Vue 自定义组件编写 案例实战

index.vue <template><div><el-button type"primary" click"showDialog">添加邮递配置</el-button><el-dialog :title"dialogTitle" :visible.sync"dialogVisible" width"800px" :before-clos…

【Leetcode】一、排序

文章目录 1、选择排序2、冒泡排序3、插入排序 1、选择排序 给定数组arr&#xff0c;其长度为n。实现思路&#xff1a; 遍历数组&#xff0c;从0 ~ n - 1&#xff0c;找到最小的&#xff0c;找到后&#xff0c;和数组的第一个元素互换位置继续新一轮遍历&#xff0c;从1 ~ n -…

路网双线合并单线——ArcGIS 解决方法

路网双线合并成单线是一个在地图制作、交通规划以及GIS分析中常见的需求。双线路网定义&#xff1a;具有不同流向、不同平面结构的道路。此外&#xff0c;车道数较多的道路&#xff08;例如&#xff0c;双黄实线车道数大于4的道路&#xff09;也可以视为双线路网&#xff0c;本…

扩容升级丨极海正式推出G32A1465系列汽车通用MCU,驱动智驾再进阶

继2023年推出G32A系列汽车通用平台首发产品G32A1445系列后&#xff0c;极海宣布正式推出G32A1465系列全新汽车通用MCU&#xff0c;以满足日益增长的智能驾驶应用需求。作为升级迭代产品&#xff0c;G32A1465专为应用范围不断扩大的高运算要求而设计&#xff0c;集成丰富的通信接…

数据结构(5.2_3)——二叉树的存储结构

二叉树的顺序存储 #define MAXLEN 255struct TreeNode {ElemType value;//结点中的数据元素bool isEmpty;//结点是否为空 };void main() {TreeNode t[MaxSize]; } 定义一个长度为MaxSize的数组t&#xff0c;按照从上至下、从左至右的顺序依次存储完全二叉树中的各个结点 几个…

前端组件化探索与实践:Vue自定义暂无数据组件的开发与应用

摘要 随着前端开发技术的不断进步&#xff0c;组件化开发已成为提升开发效率、降低维护成本的关键手段。本文旨在通过介绍一款Vue自定义暂无数据组件的开发与实践&#xff0c;深入探讨前端组件化开发的重要性、优势及其在实际项目中的应用。 一、引言 在前端开发中&#xff0…

七天打造一套量化交易系统-Day0-量化投资发展历程

七天打造一套量化交易系统-Day0-量化投资发展历程 1、本间宗久&#xff08;1724-1803&#xff09;2、朱尔斯雷格纳特 Jules Regnault&#xff08;1834—1894&#xff09;3、拉尔夫纳尔逊艾略特&#xff08;1871-1948&#xff09;4、爱德华索普(Edward O. Thorp)&#xff08;193…

windows中使用Jenkins打包,部署vue项目完整操作流程

文章目录 1. 下载和安装2. 使用1. 准备一个 新创建 或者 已有的 Vue项目2. git仓库3. 添加Jenkinsfile文件4. 成功示例 1. 下载和安装 网上有许多安装教程,简单罗列几个 Windows系统下Jenkins安装、配置和使用windows安装jenkins 2. 使用 在Jenkins已经安装的基础上,可以开始下…

Vue.js 集成高德地图:从零开始的实战指南

在现代 Web 开发中&#xff0c;地图服务已经成为许多应用的核心功能之一。高德地图作为国内领先的地图服务提供商&#xff0c;提供了强大的 API 接口&#xff0c;方便开发者在应用中集成地图功能。今天&#xff0c;我们将深入探讨如何在 Vue.js 项目中集成高德地图&#xff0c;…

Element UI DatePicker选择日期范围区间默认显示前一个月和本月

要求&#xff1a;点击el-date-picker选择时间范围时&#xff0c;默认展开当月和上个月。 但是Element UI的组件默认展开的是本月和下一个月&#xff0c;如下图所示&#xff1a; 改为 <span click"changeInitCalendarRange"><el-date-picker v-model"r…

IT产品研发全生命周期【详细说明】

阶段步骤任务负责人产品管理用户故事收集和理解用户需求&#xff0c;创建用户故事产品经理需求分类分类用户故事&#xff0c;组织和优先级排序需求经理可行性分析评估需求的技术可行性与实现难度研发经理需求转换将需求转化为具体的产品特性或功能要求需求经理需求管理创建需求…

设计模式七大原则(五)迪米特法则

迪米特法则 迪米特原则&#xff08;Law of Demeter LoD&#xff09;是指一个对象应该对其他对象保持最少的了解&#xff0c;又叫最少知 道原则&#xff08;Least Knowledge Principle,LKP&#xff09;&#xff0c;尽量降低类与类之间的耦合 强调只和朋友交流&#xff0c;不和陌…