以下部分将介绍Java HotSpot性能引擎的重要的体系结构及其特性。
4. 内存模型
4.1 无句柄对象
Java 2 软件开发工具包(SDK)使用间接句柄来表示对象的引用。虽然在垃圾回收过程中,这样做会使对象的重新定位变得更加简单,但这会引发一个重要的性能瓶颈,因为大多数对Java编程语言对象的实例变量的访问都需要两个层次的间接引用。Java HotSpot性能引擎消除了句柄的概念:对象的引用被实现为直接指针,从而可提供对实例变量的C-速度访问。垃圾回收器则负责在内存被回收过程中,当对象被重新定位时,寻找并更新所有对在适当位置上的对象的引用。
4.2 双字(Tow-Word)对象头
Java HotSpot性能引擎使用双机器-字对象头,而不是象Java 2 SDK那样使用三字对象头。由于平均的Java编程语言的对象尺寸较小,因而这种技术对节省空间产生了重要作用(大约节省了8%的堆的大小)。第一个对象头的字包含了身份标识哈希码和GC状态等信息;第二个对象头的字是一个对对象的类的引用。只有数组才有第三个对象头字段,它是用来表示数组大小的。
4.3 将映射数据表示为对象
类、方法以及其它内部映射数据被直接表示为堆上的对象(尽管这些对象也许不能被基于Java技术的程序所直接访问)。这不仅简化了内存模型,而且使你可以采用与回收其它Java编程语言对象相同的垃圾回收器来回收这类映射数据。
4.4 本地线程支持,包括任务抢先和多重处理技术
每个线程方法的激活栈是使用宿主操作系统的线程模型来表示的。Java编程语言方法和本地方法可共享相同的栈,从而可允许在C和Java编程语言间的快速调用。使用宿主操作系统的线程调度机制可支持全抢先的Java编程语言线程。
Java HotSpot性能引擎的体系结构(3)
最新推荐文章于 2024-08-04 11:07:52 发布