java中使用new 创建一个类的对象实例:
1.首先在方法区中的类信息中查找是否有这个类的信息。
** 2.如果有继续运行,在java堆中找出相应的一块空闲内存。**这里如果java堆的内存结构是整齐的(上部是已经占用的内存,下部是空闲的内存),用一个指针隔开两种内存。这时只需要把指针向下移动相应的大小即可。 如果java堆的内存不是整齐的,(像是链表)这个时候使用一张java堆内存的空闲表来查找合适的内存存放。
3.分配内存完成后,把这段内存化为0
4.虚拟机开始为这片区域配置类的元数据
5.java调用new 后面的init函数(类的构造函数),这个时候完成才算完成程序员想要的对象实例
Hotsopt中的java对象结构:对象头,实体数据,填充字段
对象头 :
1.类指针,用来判断是那个类的实例
2.自身数据指针,这里指向运行时候需要的数据,例 如哈希码,GC分代年龄等
实体数据:
就是代码中定义的各种参数,包括自己的和从父类继承的
填充字段:
Hotspot中对象的大小是8字节的整数倍。所有需要填充。