java 对象的创建过程_Java 对象的创建过程

引言

重点讲讲普通的对象、数组对象以及class对象的创建过程。

对象通常由三个部分组成:对象头、实例数据喝对齐填充。

39a50c202e21680aa86aa7e42abf3136.png

1. 普通对象创建过程

类加载

分配内存

初始化

设置对象头

执行init方法

1.1 类加载

JVM遇到new 关键字时,会去常量池中查看有无该类的符号引用,并检查其是否加载、解析和初始化。如果有则,进行下一步分配内存,否则执行类加载机制。

类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。

详细过程:加载-连接-初始化-使用-卸载

ed7e31c86839898b418b352fd85a36e3.png

new指令对应语言层面上,对象克隆、对象序列化

1.2 分配内存

对象所需内存大小根据加载的类来确定,为对象分配内存也就是在堆内存中分配一块确定大小的内存。

这里有两个点需要注意:

内存划分方式

指针碰撞

空闲列表

并发内存分配带来的混乱

CAS比较与交换

TLAB本地线程分配缓冲

1.3 初始化

JVM初始化分配好的内存,将其设为零值,注意不包括对象头。如果使用了TLAB,这一步可以提前到内存分配阶段进行。

1.4 设置对象头

对象头包含两部分信息。第一部分是用于存储对象自身的运行时数据,如hashcode、GC分代年龄、锁状态标志、线程持有的锁等;第二部分是类型指针,指向它对应的类元数据,VM用这个确定其属于哪个类的实例。

1.5 执行init方法

主要是对属性赋值,执行构造函数。

参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值