对象实例化过程

目录

一、Java对象实例化在JVM中的过程:

类加载与初始化

分配内存

初始化对象内存

设置对象头

执行初始化方法

构造方法执行

二、对象的创建过程


一、Java对象实例化在JVM中的过程:

类加载与初始化:
  • 当JVM需要实例化一个对象时,它首先会检查目标类是否已经被加载和初始化。
  • 如果类没有被加载,JVM会通过类加载器(ClassLoader)将类的字节码文件加载到内存中,并为其生成对应的Class对象。
  • 加载完成后,JVM会进行类的初始化,这包括执行类中的静态变量初始化、静态代码块等。
分配内存:
  • 一旦类完成初始化,JVM会根据目标类的大小在堆内存中为其分配内存空间。
  • 内存分配的方式取决于Java堆内存的规整性,可能采用指针碰撞或空闲列表。
初始化对象内存:
  • 为对象分配内存后,JVM会将对象的普通成员变量(实例变量)初始化为默认值(如int为0,String为null)。
  • 这一步确保对象在构造方法执行前,其字段已经是确定的默认值,可以安全地被访问。
设置对象头:
  • JVM还会为新创建的对象设置对象头信息,包括对象的哈希码、GC分代年龄、锁状态等,以及对象的类元信息(指向Class对象的指针)。
执行初始化方法:
  • 对于Java程序来说,对象的创建在JVM层面完成后,还需要执行Java代码层面的初始化。
  • 这包括执行由编译器自动生成的<init>方法(也称为实例构造器或构造器方法),该方法会初始化成员变量的值,执行实例初始化块(非静态代码块),并最终调用目标对象的构造方法。
构造方法执行:
  • 构造方法是Java程序员在类中定义的,用于初始化对象的特殊方法。
  • 当构造方法执行完毕后,一个完全初始化的Java对象就创建完成了。

二、对象的创建过程

1、实例化一个对象,jvm首先会检查目标对象是否被加载并**初始化,**如果没有需要立刻去加载目标类,然后调用目标类的构造器完成初始化。

2、目标的加载通过类加载器来实现,主要是把一个类加载到内存中

3、然后是初始化的过程,主要是对目标类里面的静态变量、成员变量、静态代码块进行初始化,

4、当目标类被初始化以后,就可以从常量池里面去找到对应的类元信息了,并且目标对象的大小在类加载完之后就确定了,所以就需要为新创建的对象根据目标对象的大小在堆内存里面去分配内存空间,内存分配的方式2种,1、指针碰撞,2、空闲列表。

5、jvm会根据java堆内存是否规整来决定内存的分配方法,然后jvm会把普通成员变量初始化为0值,int-->0,string--> null。 主要是为了保证对象里面的实例字段不用初始化就可以直接使用,也就是程序能够直接获取这些字段,对应的数据类型的0值,

6、然后还需要对目标对象的对象头做一些设置,比如对象所属的类元信息 。 对于jvm来说 新对象的创建工作完成了,但是对于java语言来说,对象创建刚刚开始,接下来要做的就是执行目标对象内部生成的init方法,初始化成员变量的值,执行构造块、最后调用目标对象的构造方法,完成对象创建。init java文件编译后 在字节码文件里面生成的,他是一个实例构造器,会把变量初始化,完成初始化动作。

相关推荐
非优秀程序员7 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻8 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
文丑颜不良啊10 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang11 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪11 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息12 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼12 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff13 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff14 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
SL_staff15 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品