先检查这个对象所代表的类是否已经被加载、解析和初始化过,如果没有在先执行相应的类加载过程。类加载通过后,可以确定所需的内存大小,并在Java堆中分配内存。分配内存的过程要考虑线程安全(指针碰撞,空闲列表)。接着虚拟机将分配到的内存空间都初始化为零值。接着设置对象头信息。最后执行<init>方法按照程序员的意愿对对象初始化。
对象的内存布局:
1、对象头:运行时相关数据。
2、实例数据:真正存储的有效信息。
3、对齐填充:非必要。
对象的访问定位:要使用对象,就要通过栈上的reference数据来操作堆上的具体对象。
1、使用句柄:
2、直接指针: