HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
  • 《可观测和监控》
随笔
关于作者
  • 《PureJavaCoderRoad》

    • 导读

    • Java基础

    • Java进阶

    • Java高阶

      • JVM

        • JVM掌握的知识点
        • Java内存区域
        • Java内存模型
        • Java内存模型的happen-before
        • 类加载机制
        • 聊聊你熟悉的垃圾回收器
        • 谈谈Java的垃圾回收
        • 谈谈创建对象的过程
      • Java线程

      • 数据结构与算法

    • 开发辅助工具

    • 计算机网络

    • 数据库

    • JavaEE

    • 中间件

    • 架构

    • 建议

  • PureJavaCoderRoad
  • Java高阶
  • JVM
#过程
码农阿雨
2025-12-04
目录

谈谈创建对象的过程

Java 虚拟机遇到 new 指令时,对象创建流程并非一步到位,通常需要经过以下 6 个步骤:

# 1. 类加载检查 (Class Loading Check)

JVM 会检查这个类是否已被加载(Load)、链接(Link)和初始化(Initialize)。

  • 如果类尚未加载,则必须先执行相应的类加载过程。类加载机制

# 2. 内存分配 (Memory Allocation)

对象所需内存大小在类加载完成后便确定了,接下来就是从 Java 堆(Heap) 中划分一块足够的空间给新对象。

  • 划分方式:
    • 指针碰撞(Pointer Bumping):如果堆内存是规整的(如使用 Mark-Compact 算法),只需移动指针。
    • 空闲列表(Free List):如果堆内存是不连续的,则需要在列表中找到足够大的空闲块。
  • 并发处理 (Concurrency Handling):由于对象创建非常频繁,多线程同时分配内存可能导致分配指针冲突,JVM 通常采用两种方式解决:
    • CAS (Compare-and-Swap):对分配动作加锁,失败了重试。
    • TLAB (Thread Local Allocation Buffer):为每个线程预先在 Eden 区划分一块专属的私有空间。线程优先在自己的 TLAB 上分配,用完了再申请新的 TLAB。

# 3. 初始化为零值 (Zero Initialization)

分配到的内存空间(不包括对象头)会被统一初始化为零值(例如 int 为 0,boolean 为 false,引用为 null)。

  • 目的:确保对象的实例字段在 Java 代码中即使没有赋初值,也可以直接使用对应的零值。

# 4. 设置对象头 (Object Header Setup)

JVM 会设置新对象的对象头(Header),主要包含两部分信息:

  • 运行时元数据(Mark Word):包括哈希码、GC 年龄、锁状态标志位(偏向锁、轻量级锁等)。
  • 类型指针:指向该对象所属类的元数据(让 JVM 知道这个对象是哪个类的实例)。

# 5. 执行构造函数 ( 方法)

执行 Java 代码中的 <init> 方法(即我们定义的构造函数)。

  • 执行构造函数是为了给对象的实例字段赋予程序期望的初始值,这个阶段才是真正的初始化。

# 6. 返回对象引用

至此,一个对象创建完成。JVM 将创建好的对象引用(Reference)赋值给程序中的变量,供后续使用。

阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#过程
上次更新: 2025-12-04 03:34:09
最近更新
01
MySQL支持的锁有哪些
12-04
02
Synchronized相关
12-04
03
synchronized锁升级
12-04
更多文章>
Theme by Vdoing | Copyright © 2020-2025 码农阿雨
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式