欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Java虚拟机对象创建过程

Java虚拟机对象创建过程

2025/2/22 2:09:44 来源:https://blog.csdn.net/lin1151211427/article/details/140242830  浏览:    关键词:Java虚拟机对象创建过程

Java对象的创建过程

创建过程大致分成五步:

  1. 类加载检查
  2. 分配内存
  3. 初始化零值
  4. 设置对象头
  5. 执行init

接下来详细说明每一步执行的具体操作。

  1. 类加载检查
    首先检查这个指令能够在常量池中定位一个类的符号引用
    接着回去检查这个符号引用代表的类是否已经被加载、解析、初始化,如果没有的话那么会进行累加载的过程。

进行类加载之后就是分配内存了,类加载完成之后就可以确认类加载所需要的内存。

  1. 分配内存
    通俗来说就是给新创建的对象分配内存,现在分配内存有两种方式,分别是指针碰撞和空闲列表。
    首先指针碰撞指的是内存分配是在连续的内存空间中进行的。我们已经知道了对象使用的内存大小,直接在原来的末尾进行增加对应大小的内存就可以。第二种是空闲列表,对应于内存空间不连续的情况,那么就需要有一个表用来记录当前那个内存空间是空闲的,哪个空间是已经被使用的,内存分配的时候直接在表上进行申请就可以了。
  2. 初始化零值
    在分配完内存之后,虚拟机必须将分配到的内存空间都初始化成零值。这主要有两个原因,一方面是可以避免当前的内存空间有脏数据,另外一个原因是保证对象在创建的时候能够让Java代码在不赋值的时候可以直接访问使用,这样就可以使Java程序访问对应的数据类型的默认值。
    比如我们知道的int的默认值是0 boolean 的默认值是false。
  3. 设置对象头
    之后,Java虚拟机还需要对这些对象进行必要的设置,例如设置对象对应的类,对象的哈希码,对象的GC年龄等等,是否使用偏向锁等等。
  4. 执行init
    执行完上述的操作之后,对于虚拟机来说当前的对象已经创建完成了,但是现在对于Java视角来说还没有完成,所有的值都是默认值,还没有设置成用户设置的值,所以最后还会执行init方法执行对象的初始化。

最终完整的对象才被构建出来。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词