2024 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面以获取有关如何操作的更多信息。

0
Collections

未展开的小地图改进的占位符(CLJ-1517中数组的配套项)。

3 答案

0

评论者:jafingerhut

是否期望这些性能优于PersistentArrayMap?

0

评论者:ztellman

是的,在某些情况下,性能显著提升,原因有三(按重要性排序)

  • 位置构造函数,无需进行数组实例化/填充
  • 使用哈希比较进行短路等性检查
  • 任何操作都不进行迭代

https://github.com/ztellman/cambrian-collections/blob/master/test/cambrian_collections/map_test.clj#L64-L148中有一系列基准测试,将操作与使用关键词(不受益于哈希比较)和符号(受益于哈希比较)的映射进行比较。7项映射示例导致未展开的映射溢出,因此仅存在以测试溢出机制。

我已经在我笔记本电脑上运行了基准测试套件,结果在https://gist.github.com/ztellman/961001e1a77e4f76ee1d。一些值得注意的结果

其他基准测试因未展开代码而略微更快,但大多数性能提升来自上述行为。在一个更不合成化的基准测试中,我发现Cheshire JSON解码(占33%的JSON词法分析和66%的数据结构构建)速度提高了大约30-40%。

0
参考:[CLJ-1610](https://clojure.atlassian.net/browse/CLJ-1610)(由alexmiller报告)
...