V8中的压缩指针实现与JVM的压缩Oop有何不同?

问题描述 投票:0回答:1

背景:V8宣布了一项称为指针压缩(What's happening in V8? - Benedikt Meurer)的功能,该功能旨在减少64位进程的指针的内存开销。自2010年以来(自6u23开始),Java JVM就具有CompressedOops功能。乍看起来,它看起来很相似,但是后来我意识到它并不完全相同。

问题:指针压缩技术(V8与JVM)之间的主要区别是什么?


V8实现似乎仍未完成,但我至少找到了一些参考资料:

  1. JVM实现:

  2. V8实现

javascript java memory jvm v8
1个回答
0
投票

我认为您提供的链接已包含答案?简而言之:

JVM的“压缩的对象”通过移位节省了3位,因此可以使用8位粒度的32位指针来寻址2³* 4 GB。 (至少那是您的链接所说的;我对JVM一无所知,因此我无法确认或否认这是准确的信息。)

V8的“压缩指针”在64位(实际上是48位)地址空间中选择一个基址,然后将所有堆指针存储为该基址的32位偏移量,因此可以在其中寻址最大堆大小。此模式为4GB。

我想JVM也需要使用基地址的某种变体,否则移位的指针将被限制为整个地址空间的很小且固定的子集。V8的方法保留了JVM移开的位,这对于V8的用途来说是很好的,因为它使用这些位存储其他信息(它的指针被标记了,并且标记在那些位中)。

© www.soinside.com 2019 - 2024. All rights reserved.