Java对象创建的过程及对象的内存布局与访问定位

Posted March On

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java对象创建的过程及对象的内存布局与访问定位相关的知识,希望对你有一定的参考价值。

这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等。

1、对象创建的过程

  1. 类加载、解析、初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符号引用,并检查符号引用代表的类是否被加载、解析、初始化,若没有则先进行类加载。
  2. 对象内存分配:类加载检查通过后,虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后便可完全确定。分配内存的任务等同于从堆中分出一块确定大小的内存。
    1. 根据内存是否规整(即用的放一边,空闲的放另一边,是否如此与所使用的垃圾收集器是否带有压缩整理Compact功能有关),分配方式分为指针碰撞(Serial、ParNe等收集器)和空闲列表(CMS收集器等)两种

    2. 并发控制:可能多个对象同时在从堆中分配内存因此需要同步,两种解决方案:虚拟机用CAS配上失败重试保证原子操作;把内存分配动作按线程划分在不同空间中进行即每个线程预先分配一块线程本地缓冲区TLAB,各线程在各自TLAB分配为各自对象分配内存。

  3. 对象的初始化:对象头和对象实例数据的初始化

对象的内存布局

对象的访问定位

以上是关于Java对象创建的过程及对象的内存布局与访问定位的主要内容,如果未能解决你的问题,请参考以下文章

JVM技术专题「原理专题」全流程分析Java对象的创建过程及内存布局

10_对象的实例化内存布局与访问定位

jvm学习记录-对象的创建对象的内存布局对象的访问定位

浅谈对象的创建内存布局和访问定位

深入理解Java虚拟机Java对象的创建,内存布局和访问定位

对象创建方法,对象的内存分配,对象的访问定位