gpt4 book ai didi

对象到底是怎么new出来的

转载 作者:知者 更新时间:2024-03-13 07:04:55 25 4
gpt4 key购买 nike

前言:要想理解本文,必须先了解JVM的内存结构
一.创建对象的方式

  • new:最常见
  • 反射:Class.newInstance()
  • 使用clone()
  • 反序列化
    二.创建对象的步骤(对象在JVM中怎么存储?)
  1. 判断对象的类是否加载,没加载进行加载
  • 为对象分配内存空间

  • 内存规整:采用指针碰撞,指针就是空闲内存和使用过的内存的一个分界点,每次有新的对象,指针就向后移动相应大小的内存空间。(内存规整说明采用复制算法/标记压缩算法)

  • 内存不规则:空闲列表:JVM维护一个空闲列表,记录哪些内存块可用,有新的对象进入时,,从空闲链表中找到空闲的位置进行分配。

  • 说明:采用哪种方式完全取决于垃圾回收器是否使用内存整理的算法

  • 处理并发的问题:使用TLAB或者CAS保证原子性

  • 初始化分配到的空间:给所有的属性赋初始值

  • 设置对象头

  • 执行init方法:执行代码层面的构造器,完成初始化。 
    三.对象的内存布局

**

**

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

四.对象的访问定位:

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

句柄访问



**直接指针:**Hotspot采用

寄语:行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com