JVM学习笔记10

31 阅读1分钟

自动内存管理

JVM中对象创建的过程

JVM遇到字节码new指令时,检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个引用符号所代表的类是否已被加载,解析和初始化过。如果没有,就先执行相应的类加载过程。类加载检查通过后,虚拟机将为新对象分配内存。

内存分配的2种方式:

指针碰撞 (Bump The Pointer)

空闲列表(Free List)

对象的内存布局

HotSpot里,对象在堆中的存储布局分为3个部分:

  • 对象头(Header)
  • 实例数据(Instant Data)
  • 对齐填充(Padding)

对象头包括2部分:

  • Mark Word
  • 类型指针

实例数据

代码里定义的这种类型的字段内容

对齐填充

占位符的作用。HotSpot要求对象起始地址必须是8字节的整数倍,即任何对象的大小必须是8字节的整数倍。实例数据未对齐部分靠对齐填充来补全。

对象的访问定位

对象的访问方式由虚拟机实现而定,主流有以下2种:

  • 句柄
  • 指针

HotSpot使用指针的方式来访问对象