JVM中对象创建过程

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

这个过程大概图示如下:

虚拟机收到new指令触发。

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

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

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

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

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

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

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

相关推荐
朝阳394 分钟前
React【面试】
前端·react.js·面试
西凉的悲伤5 分钟前
java 使用PNG图片隐写文件
java·图片隐写·png
有梦想的小何8 分钟前
Cursor AI 编程实战(篇一):Prompt 与案例总结
java·linux·prompt·ai编程
河阿里28 分钟前
SpringBoot:Spring Task定时任务完整使用教学
java·spring boot·spring
jiayong2328 分钟前
Tool Permission 与 Sandbox 的安全流水线:Agent 工具系统的工程边界
java·数据库·安全·agent
豹哥学前端36 分钟前
前端 LocalStorage 实战:从入门到熟练,一篇就够了
前端·javascript·面试
rururunu37 分钟前
Windows 下切换 Java 环境太复杂了,我做了个 cli 工具,可以快速安装,切换 Java 版本
java
qq_4523962339 分钟前
第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
java·开发语言·jmeter
weixin_4440129343 分钟前
如何在MongoDB中实现按时间跨度的分片路由_时间序列范围分片与冷热节点架构
jvm·数据库·python