关于Java中的对象 Object o = new Object()

一、对象的创建过程

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