一、对象的创建过程
1.class loading:将new T()加入到内存
2.class linking(verification,preparation,resolution)
3.class initializing
4.申请对象内存:申请new T()内存大小
5.成员变量赋默认值:如果T变量m=8,则给m赋值为0.
6.调用构造方法<init>
1).成员变量顺序赋初始值:将T中变量m赋值为8
2).执行构造方法语句:先调用父类super()
二、对象在内存中的存储布局
观察虚拟机配置:java -XX:+PrintCommandLineFlags -version
普通对象
1.对象头:markword 8
2.ClassPointer指针: -XX:+UseCompressedClassPointers为4自己 不开启为8字节
3.实力数据
4.Padding对齐,8的倍数
数组对象
1.对象头:markword 8
2.ClassPointer指针同上
3.数组长度:4字节
4.数组数据
5.对齐 8的倍数
三、对象具体包括什么(还没搞懂)
四、对象怎么定位
Tt = new T()
1.句柄池:t一个指针指向创建的对象,一个指针指向T.class
2.直接指针:t指针指向创建的对象,对象指针指向T.class
五、对象怎么分配(和GC有关,还未了解)
六、Object o = new Object()在内存中占用多少字节
markword + ClassPointer + Padding = 8 + 4 + 4 = 16