Java对象创建过程

2018-03-14  本文已影响0人  倦飞知还

整体流程

虚拟机在收到一条new指令后,首先取检查这个指令的参数是否能够在常量池定位到类的符号引用,并且检查这个符号引用是否已被加载、解析和初始化过。如果没有执行一段类的加载过程,随后按照加载的类信息在内存中给对象分配一段内存空间,接着设置对象的表头信息,最后把对象按照程序员的意愿进行初始化,返回对象的地址。


Untitled Diagram.jpg

内存分配

内存分配的方式主要包括两种,指针碰撞和空闲列表。

选择哪种分配方式取决于Java堆是否规整,而java堆是否规整取决于垃圾收集器是否有压缩整理功能。
Serial和ParNew带Compact过程采用指针碰撞,CMS基于Mark-Sweep算法采用空闲指针。
内存空间的分配的同步方式有CAS算法机制和本地线程缓存机制。

表头设置

设置包括哪个类的实例,类的元数据信息、对象哈希吗、对象GC分代年龄。

执行init方法

执行类代码中的init方法。

上一篇 下一篇

猜你喜欢

热点阅读