自动内存管理
JVM中对象创建的过程:
JVM遇到字节码new指令时,检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个引用符号所代表的类是否已被加载,解析和初始化过。如果没有,就先执行相应的类加载过程。类加载检查通过后,虚拟机将为新对象分配内存。
内存分配的2种方式:
指针碰撞 (Bump The Pointer)
空闲列表(Free List)
对象的内存布局
HotSpot里,对象在堆中的存储布局分为3个部分:
- 对象头(Header)
- 实例数据(Instant Data)
- 对齐填充(Padding)
对象头包括2部分:
- Mark Word
- 类型指针
实例数据:
代码里定义的这种类型的字段内容
对齐填充:
占位符的作用。HotSpot要求对象起始地址必须是8字节的整数倍,即任何对象的大小必须是8字节的整数倍。实例数据未对齐部分靠对齐填充来补全。
对象的访问定位
对象的访问方式由虚拟机实现而定,主流有以下2种:
- 句柄
- 指针
HotSpot使用指针的方式来访问对象