当User user = new User()时,JVM 做了什么

本文详细解析Java程序中对象创建过程:访问方式、创建流程、内存分配策略,以及对象初始化的步骤和指令重排序问题。涵盖句柄法与直接指针法,以及内存分配的并发解决方法。

Java程序的初始化顺序

一、对象的访问

Java 中,操作一个对象是通过指向这个对象的引用。对象存在堆中,这个引用存在虚拟机栈中。那么引用通过什么方式去定位堆中对象的位置呢?

1️⃣直接指针法(HotSpot 实现):引用中直接存储的就是堆中对象的地址。好处就是一次定位速度快,缺点是对象移动(GC 时对象移动)引用本身需要修改。

2️⃣句柄法:Java 堆中划分出一部分作为句柄池,引用存储的是对象的句柄地址,而句柄中包括了对象实例和类型的具体位置信息。好处是对象移动只会改变句柄中的实例数据指针,缺点是两次定位。

二、创建对象流程

1️⃣当虚拟机遇到一条 new 指令时,会去检查这个指令的参数能否在常量池中定位到一个类的符号引用,并检查代表的类是否已经被类加载器加载。如果没有被加载那么必须先执行这个类的加载。
2️⃣类加载检查通过后,虚拟机将为新对象分配内存,对象所需内存的大小在类加载后便可以确定。
3️⃣内存分配完成后,虚拟机需要将对象初始化为零值,保证对象的实例变量在代码中不赋初始值就能直接使用。类变量在类加载的准备阶段初始化为零值。
4️⃣对对象头进行必要信息的设置,比如如何找到类的元数据信息、对象的 HashCode、GC 分代年龄等。
5️⃣经过上述操作,一个新的对象已经产生,但是方法还没有执行,所有的字段都是零值。这时候需要执行方法(构造方法)把对象按照程序员的意愿进行初始化。类变量的初始化操作在类加载的初始化阶段方法完成。

三、分配内存

1️⃣分配内存有两种方式

  1. Java 堆内存是规整的(使用标记整理或带压缩的垃圾收集器),使用一个指针指向空闲位置,分配内存既将指针移动与分配大小相等的距离。
  2. 内存不是规整的(使用标记清除的垃圾收集器),虚拟机维护一个可用内存块列表,分配内存时从列表中找到一个足够大的内存空间划分给对象并更新可用内存列表。

无法找到足够的内存时会触发一次GC。

2️⃣分配内存时并发问题解决方案:

  1. 对分配内存空间的动作进行同步操作—采用 CAS 失败重试的方式保证更新操作的原子性。
  2. 每个线程在堆中预先分配一块小内存,称为线程本地分配缓存(Thread Local Allocation Buffer,TLAB),哪个线程要分配内存就在它的 TLAB 上分配,只有 TLAB 用完并分配新的 TLAB 时才需要同步锁定。通过-XX:+/-UseTLAB参数来设定。

四、创建对象指令重排序问题

A a = new A();new 一个对象的简单分解动作:

1️⃣分配对象的内存空间
2️⃣初始化对象
3️⃣设置引用指向分配的内存地址

其中2️⃣3️⃣两步会发生指令重排序,导致多线程时如果在初始化之前访问对象则会出现问题,单例模式的双重检测锁模式会存在这个问题。可以使用 volatile 来禁止指令重排序解决问题。

内容概要:本文研究了一种应用于太阳能发电系统的多级逆变器,旨在通过采用正弦脉宽调制(SPWM)技术有效降低输出电压的总谐波失真(THD),从而提升电能质量。研究基于Simulink平台构建了完整的仿真模型,系统地实现了SPWM信号生成、驱动逻辑控制以及多电平输出波形合成等关键环节,验证了该多级逆变器在不同运行工况下具备优异的动态响应能力和稳定性。仿真结果表明,所设计的逆变器能够输出接近理想正弦波的电压波形,显著抑制高次谐波,满足可再生能源并网对电能质量的严苛要求,体现出多级逆变拓扑在光伏发电系统中的技术先进性与工程应用价值。; 适合人群:电气工程、自动化、新能源科学与工程及相关专业的本科生、研究生,以及从事光伏逆变器设计、电力电子变换技术和可再生能源并网系统研发的工程技术人员。; 使用场景及目标:①深入理解多级逆变器的工作原理及其在太阳能发电系统中的关键作用;②掌握SPWM调制技术的理论基础与实现方法,并分析其对改善THD的核心机制;③借助Simulink仿真平台开展电力电子电路的建模、参数调试与性能评估,服务于课程设计、毕业设计、科研课题或实际工程项目开发。; 阅读建议:建议读者结合提供的Simulink仿真模型进行同步操作与验证,细致调整调制比、载波频率等关键参数,观察其对输出波形和THD指标的影响,以深化对系统动态特性的理解,并尝试优化控制策略以进一步提升系统性能。
VCF 生成器 Lite v6.0.0:批量导入与功能拓展 VCF 生成器 Lite v6.0.0 正式版已发布,此次更新带来了批量导入手机通讯录这一重要功能,极大地方便了用户整理和管理联系人信息。同时,新增了多项功能,如翻译所有 CLI 内容,让不同语言背景的用户都能更好地使用;verbose 模式新增更多日志信息,有助于用户更详细地了解操作过程。 此外,还添加了多地区号码格式支持,包括中国港澳台地区电话号码格式,满足了不同地区用户的需求。当未捕获异常时,系统会自动保存错误日志,并引导用户反馈给开发者,这体现了产品团队对用户体验 的重视,有助于及时发现和解决问题。 修复痛点:引号清理与进度条显示问题 在修复方面,此次更新解决了引号清理功能在包含换行符时的错误行为,以及自 `v4.3.0` 版本以来的进度条显示问题。这些问题虽然看似微小,但却影响了用户的使用体验,修复后能让用户更加顺畅地使用 VCF 生成器 Lite。 代码与文档重构:提升可维护性与易用性 在变更方面,将翻译框架迁移到 gettext,提升了 `LANGUAGE` 环境变量 优先级,方便用户根据自己的语言偏好进行设置。在 AI 的指导下重构项目,使得各层次职责更加清晰,代码更加模块化,可维护性更高,这为产品的后续发展奠定了良好的基础。 同时,按 Diataxis 框架重构用户文档,按开发生命周期 重组开发者文档,让用户和开发者都能更方便地获取所需信息,提高了产品的易用性。 编辑观点:VCF 生成器 Lite v6.0.0 的更新在功能、修复和代码文档方面都有显著提升,满足了用户的实际需求,增强了产品的竞争力,未来有望在市场上取得更好的成绩。
内容概要:本文围绕2026年高教社杯全国大学生数学建模竞赛B题“无线电干扰源的快速自动定位与清除”展开,提供完整的数学建模方案、配套代码实现与论文撰写资源。内容涵盖问题分析、模型构建、算法设计与仿真验证全过程,并延伸至多类相关科研方向的Matlab/Simulink仿真实例,如无人机路径规划、微电网优化调度、信号处理、电力系统无功优化、时频冲突消解等,充分展示复杂工程问题的建模与求解方法。资源通过百度网盘及微信公众号“荔枝科研社”免费共享,旨在为参赛学生与科研人员提供系统性技术支持与创新启发。; 适合人群:全国大学生数学建模竞赛参赛者,具备一定数学建模、编程基础(尤其是Matlab/Simulink)的本科生与研究生,以及从事智能优化、通信工程、电力系统、信号处理、路径规划等相关领域研究的科研人员。; 使用场景及目标:①辅助完成数学建模竞赛中关于无线电干扰源定位与清除等问题的建模、编程与论文撰写;②获取多种科研课题的高质量代码实现与论文参考范例,提升科研效率与创新能力;③学习先进优化算法(如GWO、WOA、NSGA-III等)在复杂系统优化中的应用方法;④借鉴多学科交叉问题的建模思路与仿真技术。; 其他说明:所有资源均可通过提供的百度网盘链接及公众号免费获取,建议用户按照目录结构系统性地浏览与学习,结合代码运行与论文阅读进行实践,以深入掌握建模范式与算法实现细节,充分发挥资源的学习价值与科研参考价值。
内容概要:本文系统研究了基于模型预测控制(MPC)与卡尔曼滤波相结合的空调加热器及室内温度调节方法,并提供了完整的Matlab代码实现。通过建立精确的热力学动态模型,采用MPC算法进行多步预测与滚动优化,实现对室内温度的最优控制策略,在保证舒适度的同时提升能源效率。为应对系统中存在的测量噪声与状态不可测问题,引入卡尔曼滤波器对关键状态变量进行实时估计与噪声抑制,显著增强了系统的鲁棒性与控制精度。文中详细阐述了MPC控制器的设计流程,涵盖预测模型构建、目标函数设定、约束条件处理及二次规划求解方法,同时深入分析了卡尔曼滤波在状态估计中的融合机制。通过Matlab仿真实验验证了该复合控制策略在多种工况下的稳定性、抗干扰能力与节能潜力,结果表明其在智能建筑温控、工业加热系统等领域具有广泛的应用前景。; 适合人群:具备自动控制理论基础和Matlab编程能力的科研人员、研究生及自动化、电气工程、暖通空调等相关专业的高年级本科生。; 使用场景及目标:①学习并掌握模型预测控制(MPC)在典型温控系统中的建模与实现方法;②理解卡尔曼滤波在状态估计中的作用及其与先进控制算法的协同机制;③应用于智能家居、绿色建筑、工业过程控制等需要高精度、高能效温度调节的实际工程场景。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现细节,重点关注MPC的预测时域、控制时域设置、代价函数权重调优以及卡尔曼滤波的协方差初始化与增益收敛过程,动手复现并修改仿真参数,以深入理解先进控制策略的设计思想与工程折衷。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值