请解释一下对象的创建过程?(半初始化)
加问DCL要不要加volatile问题?(指令重排)
对象在内存中的存储布局?(对象与数组的存储不同)
例如一个class对象中有三个变量,分别是int(4bytes),long(8bytes),boolean(1bytes)
按照存储布局,对象大小为8(Markword)+4(class pointer)+4(int)+8(long)+1(boolean)=25,但经过对齐后,要加7bytes让其被8整除,所以实际大小为32bytes。
对象头具体包括什么? (markword klasspointer)Synchronized锁信息
对象怎么定位?(直接 间接)
对象怎么分配?(栈上—线程本地—Eden—old)
0bject o= new 0bject()在内存冲占用多少字节?
根据上面的存储布局理论,8(Markword)+4(class pointer)+4(padding)=16bytes