使用new关键字创建实例的过程

  • JVM 检查方法区中是否存在此Class的常量引用,class 文件是否已被正确加载,连接,初始化,否则进行之
  • 虚拟机为对象分配内存,分配内存的大小已在编译期间确定,存在多少个符号引号以及方法等。
  • 在Java堆中,根据JVM的实现方式的不同,通过指针碰撞和空闲列表来找到合适的内存空间。如使用指针碰撞的方式,会使得指针发生偏移。
  • 执行 方法,初始化对象
  • 将对象地址分配至本地方法栈栈顶最顶部的的引用

JVM 使用内存空间连续的话一般使用的是指针碰撞的方式,空闲列表一般使用的场景是内存空间不连续的时候,当空闲列表无法使用的时候,就会触发 Minor GC,仍然无法分配内存则进行Full GC,仍然没有可用的空间的话,则会抛出OOM 异常

3.2 对象的内存布局

3.2.1 对象头

3.2.2 实例数据

3.2.3 数据对齐(可选)