对象的创建过程

简介: 对象的创建过程

如何创建对象


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


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


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


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


image.png

相关文章
|
20天前
|
存储 Java
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
这篇文章详细地介绍了Java对象的创建过程、内存布局、对象头的MarkWord、对象的定位方式以及对象的分配策略,并深入探讨了happens-before原则以确保多线程环境下的正确同步。
39 0
JVM知识体系学习四:排序规范(happens-before原则)、对象创建过程、对象的内存中存储布局、对象的大小、对象头内容、对象如何定位、对象如何分配
|
5月前
new 一个对象的过程中发生了什么
new 一个对象的过程中发生了什么
|
6月前
|
编译器 数据安全/隐私保护 C++
【类与对象】封装&对象的初始化及清理
【类与对象】封装&对象的初始化及清理
|
6月前
|
存储 Java
|
存储 安全 Java
详解java对象创建的过程
java对象是怎么从代码变成一块内存空间的呢?只看代码层面我们只是使用了new关键字加上调用构造器,就生成了一个对象,然后我们就可以使用这个对象了,那么虚拟机在这当中究竟是怎么实现这个过程的呢,在这里我们一起学习下这个过程。
202 0
详解java对象创建的过程
|
Java 编译器
创建一个对象的时候
创建一个对象的时候
75 0
|
缓存 安全 Java
仅且仅创建一次对象
此篇算是对《voliatile,synchronized,cas》理论的一种实践
152 0
|
开发者 Python
对象的创建流程|学习笔记
快速学习 对象的创建流程
124 0
对象的创建流程|学习笔记
|
存储 安全 Java