前言:要想理解本文 , 必须先了解JVM的内存结构
一.创建对象的方式
- new:最常见
- 反射:Class.newInstance()
- 使用clone()
- 反序列化
- 判断对象的类是否加载 , 没加载进行加载
- 为对象分配内存空间
- 内存规整:采用指针碰撞 , 指针就是空闲内存和使用过的内存的一个分界点 , 每次有新的对象 , 指针就向后移动相应大小的内存空间 。(内存规整说明采用复制算法/标记压缩算法)
- 内存不规则:空闲列表:JVM维护一个空闲列表 , 记录哪些内存块可用 , 有新的对象进入时, , 从空闲链表中找到空闲的位置进行分配 。
- 说明:采用哪种方式完全取决于垃圾回收器是否使用内存整理的算法
- 处理并发的问题:使用TLAB或者CAS保证原子性
- 初始化分配到的空间:给所有的属性赋初始值
- 设置对象头
- 执行init方法:执行代码层面的构造器 , 完成初始化 。

文章插图
下图展示了一个对象分配的全过程:

文章插图
四.对象的访问定位:创建对象的目的就是为了使用它 , 那么JVM是如何通过栈帧中的对象引用访问到其内部的对象实例呢?有2种方式:
句柄访问

文章插图
直接指针:Hotspot采用

文章插图
寄语:行动是治愈恐惧的良药 , 而犹豫、拖延将不断滋养恐惧 。
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
