在哈希容器中存储持久的v8对象句柄

Storing persistent v8 object handles in a hashed container

本文关键字:v8 对象 句柄 哈希容 存储      更新时间:2023-10-16

我想在哈希类型容器中存储v8::Persistent<v8::Object>句柄(更准确地说是Google dense_hash_set)。我需要实现我自己的哈希函数吗?我可以依靠v8::Object::GetIdentityHash方法的哈希值?戳一下代码,我可以看到他们基本上只是为对象生成一个随机的32位数字并缓存它。这是否足以避免哈希冲突?

我的答案是,是的,它可以用作散列键,但是…

由此可见,int v8::Object::GetIdentityHash():

返回该对象的标识哈希值。

当前实现使用对象to的隐藏属性存储标识哈希值

返回值永远不会为0。而且,也不能保证是独一无二的。

它可能会为不同的对象生成相同的键,并且可能会有碰撞。然而,这不足以成为放弃这个函数的理由。

问题是保持低碰撞率。这取决于GetIdentityHash的分布和哈希表的大小。

你可以测试它,计算碰撞次数,看看它是否会损害你的性能?