欢迎!请查看关于页面获取更多关于如何使用本站的信息。
我们正在使用clojure.data.json,并且使用jprofiler对项目进行了性能分析,它显示在LockingTransaction中存在热点,在分析过程中创建了许多RetryEx实例。retryex实例变量应作为类变量是静态的,以避免在新的STM事务开始时创建。
!profile.png!
附件是性能结果屏幕截图以及使retryex变为静态的补丁。目前我没有进行任何基准测试,但也许clojure.data.json的性能基准测试可以证实补丁的效果更好。
评论由:alexmiller发表
我认为这里的建议是合理的,但我很难相信它会带来太多变化。我的真正问题是为什么pprint使用dosync。
评论由:killme2008发表
我发现它还在writer中使用了很多dosync,如下:
https://github.com/clojure/clojure/blob/master/src/clj/clojure/pprint/pretty_writer.clj
看起来是在使用dosync来更改某些可变状态,也许它们可以被重写为其他形式,例如atom、java object/lock等。但这又是另一回事了。