JVM中对象的创建过程

Posted 飞鸟集

tags:

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

JVM中对象的创建过程如以下流程图中所示:

技术分享

对其主要步骤进行详细阐述:

为新生对象分配内存:

  内存的分配方式:

    指针碰撞:假设Java堆中内存是绝对规整的,所有用过的内存放在一边,空闲的内存在另一边,中间防着一个指针作为分界的指示器,那么当分配内存时仅需移动指针即可。

    空闲列表:维护一个列表,记录那些内存可用,分配时找出一块足够大的空间进行划分,并更新列表记录。

    选择:内配方式的选择依赖于内存大小是否规整,内存大小的规整,依赖于垃圾收集器是否带有压缩整理功能。   

  并发情况下保证线程安全:

    方法一:对分配内存空间的动作进行同步处理

    方法二: 把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在Java堆中预先分配一小块内存,称为本地线程分配缓冲(Thread Local Allocation Buffer,TLAB)。若采用此方式,内存空间初始化为零值将提前至TLAB分配时进行。

虚拟机对对象进行设置之后,一个新的对象已经产生了,但从Java程序的视角来看,对象创建才刚开始。执行new指令之后会接着执行<init>方法,把对象按照程序员的意愿进行初始化。

以上是关于JVM中对象的创建过程的主要内容,如果未能解决你的问题,请参考以下文章

JVM高级特性-JVM在堆中对象的分配布局访问过程

JVM技术专题 全流程化分析Java对象的创建过程「 原理篇」

JVM对象创建详解

JVM学习篇之-创建对象的过程

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

jvm中对象的创建过程