问题1 新建对象的过程
- 申请空间,此时成员变量赋初始值
- 调用构造方法,给成员变量赋值
- 关联引用
问题2 DCL和volatile的关系
- DCL全程Double Check Lock指的是单例的懒汉模式双重非空检测
- cpu在执行指令时会发生指令重排序,谁快就执行谁
- volatile通过写操作加内存屏障,禁止指令重排
问题3 对象的结构
| 对象结构 |
含义 |
32位大小 |
64位大小 |
64位开启压缩 |
| MarkWord |
8字节 |
4字节 |
8 |
8 |
| classpointer对象指针 |
指向对象类型 |
4 |
8 |
4 |
| 数组长度 |
数组 |
4 |
8 |
4 |
| instance data 实体数据 |
|
|
|
|
| padding 对齐 |
补齐为8的整数倍 |
|
|
|
问题4 MarkWord的结构
- 对象hashcode ,简单理解为对象的内存地址的整型值
- gc分代信息,4位,所以gc最大年龄为15,注意CMS默认最大年龄为6
- 锁信息,有如下锁信息:锁标志位、是否偏向锁、持有偏向锁的threadid、epoch偏向时间戳

问题5 对象的定位
- 句柄池(GC时对象指针不变)
- 直接定位
问题6 对象的地址分配

- 优先看栈里能不能放
- 是否大到了survivor区内存的50%,直接进入老年代
- 是否ThreadLocalAnnotationBuffer,进入Eden区
问题7 对象的大小
相关文章: