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

欢迎!请访问关于页面了解更多关于这个平台的信息。

0
Clojure

我们正在使用 clojure.data.json,并使用 jprofiler 对项目进行了性能分析,结果显示 LockingTransaction 存在一个热点,性能分析期间创建了太多的 RetryEx 实例。
RetryEx 实例变量应作为类变量静态使用,以避免在开始新的 STM 事务时创建。

!profile.png!

附件是性能分析结果屏幕截图和将 RetryEx 设置为静态的补丁。
我现在没有做任何基准测试,但可能一个 clojure.data.json 性能基准测试将会证明补丁效果更好。

3 个答案

0

由 alexmiller 发布的评论

我认为这里的建议听起来很合理,但我很难相信它会带来多大的影响。我的真正问题是为什么 pprint 使用 dosync。

0

由 killme2008 发布的评论

我发现它在写入时使用了很多 dosync,如下所示:

https://github.com/clojure/clojure/blob/master/src/clj/clojure/pprint/pretty_writer.clj

它们似乎使用 dosync 改变一些可变状态。也许可以将这些代码重新编写为其他形式,例如 atom、Java 对象/锁等。
但这又是另一回事了。

0
参考:https://clojure.atlassian.net/browse/CLJ-1798 (由 killme2008 报告)
...