JVM-堆

1. 什么是堆

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

2.堆空间设计

(1)句柄池 + 对象池

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

JVM-堆_第1张图片

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

JVM-堆_第2张图片

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

 

参考资料:

【深入JAVA虚拟机】

【深入理解JVM—JVM内存模型】

你可能感兴趣的:(JVM,面试,jvm)