一、内存区域
- 堆
- 直接内存
- 方法区
- 1.8之前实现是永久代,在堆中。1.8之后改成了元数据空间,放到了直接内存。
- 运行时常量池也在方法区,字符串常量池1.7之后拆分出来被放到了堆中。
- 程序计数器
- 栈
- 本地方法栈
二、对象
- 创建过程
- 类加载检查
- 分配内存
- 初始化零值
- 设置对象头
- 执行init方法
- 内存布局
- 对象头
- 运行时数据,包括哈希码,gc分代年龄,锁状态标志灯
- 类型指针,指向对象类的元数据
- 实例数据
- 对齐填充
- 对象头
- 访问定位
- 句柄方式
多走一次句柄,句柄指向对象和类 - 直接指针
对象中存一个类指针
- 句柄方式