创建对象的步骤
1. 判断对象对应的类是否被加载,链接,初始化
虚拟机遇到一条new 指令,首先求检查这个和这个符号引用代表的类是否被加载,链接和初始化,即:判断类元信息是否存在)。如果没有,那么双亲委派机制模式下,使用当前类加载器以ClassLoader+包名+类名为key进行查找对应的.class文件。如果,没有查找到文件,则抛出ClassNotFoundException异常,如果找到,则加载,并生成对应的Class对象。
2. 为对象分配内存
计算对象占用内存的大小(引用类型4个字节),接着在堆中划分一块内存给新对象
- 如果内存完整----指针碰撞
- 如果内存不完整----空闲列表分配(在K线列表找足够的内存)
3. 处理并发问题
- 采用CAS失败重试,区域加锁保证更新原子性
- TLAB(线程本地缓存区)
4. 初始化分配到的空间,即:默认初始化,保证对象在不赋值时可以直接使用
5. 设置对象的对象头(将对象的类信息(指向方法区),hashCode,GC信息,锁信息等他数据存储在对象头中)
6. 执行init方法进行初始化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix