Java 对象创建过程

了解过Java 对象创建的过程吗?

1. 类加载检测

  • 加载对象时,先检查该对象的类模板是否已被加载。(类加载的过程: 加载->连接(验证,准备,解析)->初始化)

2.分配内存

  • 在Java堆中分配一块固定大小的内存给该对象,其中分配方式有指针碰撞空闲列表。采用哪种分配方式与垃圾收集器回收算法决定( “标记-清除” or “标记-整理”)。
    • 指针碰撞:特点:堆内存整齐,无小碎片空间。 在堆内存管理中,已被利用的内存和未被利用的内存被一个分界指针分开,当给对象分配内存时,指针就向未被利用的内存进行偏移。GC收集器代表:ParNew,Serial
    • 空闲列表:特点:堆内存不整齐,存在大量小碎片空间。jvm中有个名叫空闲列表的表来记录哪些堆内存是空闲可用的。每次为对象分配完内存后,会记录更新此表。GC收集器代表:CMS

3.初始化零值

  • 类在加载的时候,在连接的准备阶段,会为类变量进行初始化操作。对象实例在内存分配完之后,对象实例字段也进行初始化为零操作。(使得对象实例字段在不用赋初值就能直接使用,比如 int ,short 默认为0)

4.设置对象头

  • 对对象添加对自己的详细介绍。如 对象的hashcode、对象的GC age、属于哪个类new出来的、如何找到类的元数据等

5.执行init 方法

  • init 简称 实例构造器 按照编写的代码进行对象进一步初始化完善,会以 父类变量初始化->父类语句块->父类构造函数->子类变量初始化->子类语句块->子类构造函数 的顺序来执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值