java对象的创建过程

文章详细阐述了Java中的类加载检查过程,包括如何分配内存,如指针碰撞和空闲列表两种策略。同时讨论了内存是否规整取决于垃圾回收算法,例如“标记-清除”和“复制算法”可能导致不规整,而“标记-整理”则保证规整。在并发环境下,使用CAS和TLAB(本地线程分配缓冲)解决内存分配问题,确保初始化零值、设置对象头信息并执行初始化方法。
摘要由CSDN通过智能技术生成
  1. 类加载检查,检查类是否被加载解析初始化过,如果没有就执行类加载
  2. 分配内存。为新生对象分配内存,有指针碰撞空闲列表两种方式
    指针碰撞:使用过的内存放到一遍,未使用的内存放到一边,中间使用一个指针来分界,分配内存的时候将指针向未分配的一侧移动 。适用于内存规整的情况下
    空闲列表:维护一个列表,记录哪块内存是可用的,分配的时候选择一块内存分配,并在表中记录。适用于内存不规整的情况
    Java 堆内存是否规整,取决于垃圾回收算法,"标记-清除"和“复制算法”是不规整的,"标记-整理"是规整的
内存分配的并发问题:
CAS+失败重试:
TLAB:本地线程分配缓冲,给每个线程预先分配一小块内存,当给对象分配内存时,先在TLAB分配,空间不足时	再进行
	  CAS+失败重试
  1. 初始化零值。
  2. 设置对象头。(哈希值、分代信息、锁、…)
  3. 执行init方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值