JVM中对象创建过程

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

这个过程大概图示如下:

虚拟机收到new指令触发。

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

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

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

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

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

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

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

相关推荐
Greyson111 小时前
HTML怎么标注字数限制提示_HTML实时字数统计占位【详解】
jvm·数据库·python
qq_3729069311 小时前
golang如何在Gin中实现路由分组_golang Gin路由分组实现方法
jvm·数据库·python
qq_3422958211 小时前
如何备份大量小表组成的数据库_并行导出与多文件并发写入.txt
jvm·数据库·python
sthnyph11 小时前
TypeScript 与后端开发Node.js
java
逻辑驱动的ken11 小时前
Java高频面试考点场景题08
java·开发语言·面试·求职招聘·春招
justjinji11 小时前
MySQL存储过程中如何防止SQL注入_使用参数化查询规范
jvm·数据库·python
qq_2069013911 小时前
mysql索引排序规则设置方法_mysqlCollation对索引影响
jvm·数据库·python
不恋水的雨11 小时前
手动调用spring的@Validated校验
java·spring
HHHHH1010HHHHH11 小时前
如何快速重置SQL表中的自增ID_使用TRUNCATE与重置命令
jvm·数据库·python
m0_7349497911 小时前
html怎么转konva舞台_Konva如何在HTML中创建2D绘图舞台
jvm·数据库·python