gpt4 book ai didi

java - ThreadLocal.java中0x61C88647常量的含义是什么

转载 作者:行者123 更新时间:2023-12-02 06:46:04 36 4
gpt4 key购买 nike

我最近读了一篇关于 Equation Group's Sophisticated Hacking 的文章确凿的证据是一个常量,也出现在 JDK 8 源代码中,例如ThreadLocal.java

HASH_INCRMENT常量的含义是什么?它如何提高性能?

/**
* The difference between successively generated hash codes - turns
* implicit sequential thread-local IDs into near-optimally spread
* multiplicative hash values for power-of-two-sized tables.
*/
private static final int HASH_INCREMENT = 0x61c88647;

最佳答案

TLDR:这是 Fibonacci hashing 的示例.

如果将 0x61c88647 转换为十进制,您将得到 1640531527,这是毫无意义的,直到您意识到在 32 位中,它是 2654435769 的签名版本。同样,这个数字看起来有点奇怪,直到您意识到它是 2 32 ÷ φ,其中 φ 是黄金比例 (√5+1)÷2。

现在这如何适合 ThreadLocal?当你创建一个新的 ThreadLocal 时,它会根据之前的 id + 我们的魔数(Magic Number)分配一个 ID。它被放入 ThreadLocalMap 中。如果发生冲突,ThreadLocalMap 会将值放入下一个可用空间。我们的神奇值允许最佳“展开”此哈希中的值,以避免这种情况。

关于java - ThreadLocal.java中0x61C88647常量的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38994306/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com