1. 什么是堆

堆是用来存储数组和类实例信息的

2.堆空间设计

(1)句柄池 + 对象池

           句柄池包含指向对象实例的指针以及指向方法区中类数据的指针, 对象池则是对象实例数据

JVM-堆

(2)对象指针直接指向一组数据,而该数据包含对象实例数据以及指向方法区中类数据的指针

JVM-堆

两种对象的访问方式各有优势,使用句柄访问方式的最大好处就是reference 中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference 本身不需要被修改。使用直接指针访问方式的最大好处就是速度更快,它节省了一次指针定位的时间开销,由于对象的访问在Java 中非常频繁,因此这类开销积少成多后也是一项非常可观的执行成本。就本书讨论的主要虚拟机Sun HotSpot 而言,它是使用第二种方式进行对象访问的,但从整个软件开发的范围来看,各种语言和框架使用句柄来访问的情况也十分常见。

 

参考资料:

【深入JAVA虚拟机】

深入理解JVM—JVM内存模型

相关文章:

  • 2021-06-28
  • 2021-09-20
  • 2022-01-15
  • 2021-11-25
  • 2021-07-03
  • 2021-10-14
猜你喜欢
  • 2020-06-19
  • 2021-09-14
  • 2021-11-23
  • 2021-11-29
  • 2021-11-16
  • 2021-12-01
相关资源
相似解决方案