对象创建
1.虚拟机遇到一个new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用
2.检查这个符号引用代表的类是否已经被加载,解析和初始化过。如果没有,那必 须先执行响应的类加载过程
3.在类加载检查功通过后,为新生对象分配内存。对象所需的内存大小在类加载完 成后便可完全确定。
对象内存布局
对象头,实例数据,对齐填充
- 对象头分为两部分,一部分用来记录对象自身的运行时数据,如在GC中的分代年龄、哈希码、持有的锁等等;另一部分是类型指针,用来记录引用,是谁指向了我?JVM通过这个来确定谁引用了对象。(是不是跟GC Root有关呢?没有研究过)
- 实例数据是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。
- 对齐填充不是必然存在的。有的虚拟机要求对象大小必须是8字节的整数倍。
怎么理解呢,就当是你玩游戏时候选择的一个英雄吧,头信息一个是他的等级,另一个就是谁操控了他,实例数据就是他的人头数,装备等等,因为这些是你靠本事拿来的。