对象的创建过程

简介: 对象的创建过程

如何创建对象


在实例化一个对象的时候,JVM首先会去检查目标对象,是否已经被加载并初始化,JVM需要去做的是立刻加载目标类,然后去调用目标类的构造器,去完成初始化,目标类的加载,通过类加载器来实现的,主要就是把一个类加载到内存里面,然后是初始化的过程,主意是对目标类里面的静态变量,成员变量,静态代码块进行初始化,当目标类被初始化以后,就可以从常量池里面去找到对应的类元信息了,并且目标对象的大小,在类加载完成之后呢就已经确定了


所以这个时候,就需要为新创建的对象根据目标对象的大小,在堆内存里面去分配内存空间,内存分配空间的方式一般有两种,第一种是指针碰撞,第二种是空闲列表,JVM回去根据Java堆内存是否规整来决定内存的分配方法,JVM会去把目标对象里面的普通成员变量初始化为0值,比如说int类型初始化为0,string类型初始化为null,这一步操作主要是保证对象里面的是实例字段不用初始化就可以直接使用,也就是程序能够直接获取这些字段对应的数据类型的0值


然后JVM还需要对目标对象的对象头做一些设置,比如对象所属的类元信息,对象的GC分代年龄,hashcode,锁标记等等,完成这些步骤以后对于JVM来说,新对象的创建工作已经完成了,但是对Java语言来说,对象创建才算刚刚开始,接下来做的是执行目标对象内部生成的init方法,初始化成员变量的值,执行构造快


最后调用目标对象的构造方法去完成对象创建,其中init方法是Java文件编译之后, 是在字节码文件里面去生成的,它是一个实例构造器,这构造器里面会把构造块,变量初始化,调用父类构造器等这样一些操作组织在一起,所以调用init方法能完成一系列的初始化动作


image.png

相关文章
|
2月前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
61 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
6月前
new 一个对象的过程中发生了什么
new 一个对象的过程中发生了什么
|
7月前
|
C++
C++程序对象动态建立和释放
C++程序对象动态建立和释放
59 1
|
7月前
|
C++
35对象的动态建立和释放
35对象的动态建立和释放
34 1
|
SQL 存储 数据采集
像对象一样对待数据
估计每个刚刚使用数据库的人都会被坑得遍体鳞伤。对于一个刚刚学会 Python 不久的开发新手来说,使用数据库的 SQL 语句几乎相当于再学一种新的语言。虽然 sqlite、pymysql 等模块提供了与数据的连接,但仍然需要自己去拼接 SQL 语句。Python 语法和 SQL 语法、各种引号、百分号、转义字符混杂在一起的酸爽,用过的人都忘不了。
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
|
Java 编译器
创建一个对象的时候
创建一个对象的时候
81 0
|
缓存 安全 Java
仅且仅创建一次对象
此篇算是对《voliatile,synchronized,cas》理论的一种实践
164 0
|
开发者 Python
对象的创建流程|学习笔记
快速学习 对象的创建流程
128 0
对象的创建流程|学习笔记

热门文章

最新文章