JVM中对象创建过程

在JVM中对象的创建,我们从一个new指令开始:

这个过程大概图示如下:

虚拟机收到new指令触发。

类加载检查:如果类没有被类加载器加载,则执行类加载流程(将class信息加载到JVM的运行时数据区的过程),对象所需内存大小在类加载完后可以完全确定。

对象分配内存:从堆中划分出一块确定大小的内存。

内存空间初始化:内存分配完后,虚拟机需要将分配到的内存空间初始化为零值(如:int值为0,boolean值为false等),保证了对象的实例字段在Java代码中可以直接使用。

为对象进行必要的设置:虚拟机为对象进行设置,如设置对象属于哪个类的实例、如何找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息,这些信息存放在对象头中。

从虚拟机的角度来看,一个新的对象已经创建完毕。但从Java程序的角度来看,对象创建才刚开始,所有的字段还是零值,所以需要程序员进行初始化操作,这样一个真正可用的对象才算完全产生出来。

init是对对象级别的变量或非静态代码块进行初始化的

clinit静态变量或者静态代码块谁来初始化呢

相关推荐
sunny_5 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
NE_STOP6 小时前
MyBatis-配置文件解读及MyBatis为何不用编写Mapper接口的实现类
java
ayqy贾杰7 小时前
Agent First Engineering
前端·vue.js·面试
Lee川10 小时前
解锁 JavaScript 的灵魂:深入浅出原型与原型链
javascript·面试
swipe10 小时前
从原理到手写:彻底吃透 call / apply / bind 与 arguments 的底层逻辑
前端·javascript·面试
后端AI实验室10 小时前
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
java·ai
程序员清风12 小时前
小红书二面:Spring Boot的单例模式是如何实现的?
java·后端·面试
belhomme12 小时前
(面试题)Redis实现 IP 维度滑动窗口限流实践
java·面试
Lee川12 小时前
探索JavaScript的秘密令牌:独一无二的`Symbol`数据类型
javascript·面试
Be_Better13 小时前
学会与虚拟机对话---ASM
java