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

欢迎!请参阅关于页面以了解此工作的更多详情。

0 投票
Clojure

目前参数装箱在clojure.lang.Reflector中效率低下的原因有两个:
1. 当参数类型非原始类型时,它会不必要地调用Class.cast(..)
2. 在装箱参数时,它会分配一个不必要的额外的Object(link: )数组

此补丁修复了这些问题,而不会改变其他行为。所有测试都通过。

7 个答案

0 投票

评论者:alexmiller

示例代码中出现问题的例子?

基准测试前/后?

0 投票

评论者:mikera

嗨,alex,我正试图改进反射的快速路径,这将会是一系列的更改,包括clj-1784和一些其他我有的想法。

我认为就每个更改进行广泛的辩论/基准测试是不划算的。是否更好的方式是为所有更改创建新的票据,并对其整体影响进行基准测试?

我愿意这样做,但如果你不打算接受这些更改(前提是证明整体性能有所改善),那么这将很有帮助。我不希望在Clojure开发上浪费时间,你们对这方面的性能改进不感兴趣。我也没有时间对每个单个的改变进行广泛的辩论。

0 投票

评论者:alexmiller

每个条目应指明一个特定问题,并提出解决方案,证明它有助于解决问题。如果有多个问题,它们可能以不同的速度发生。

如果您发现了一个热点,我们将很高兴查看它。但我们必须从要解决的问题开始,而不仅仅是:“这里有一些更改”。如果更改使事情变得更好,那么您应该能够证明这一点。

0 投票

评论者:alexmiller

我认为针对反射问题的正确答案不仅仅是移除反射。但我不能在没有您提供问题的情况下评估这一点。

0 投票

评论者:mikera

问题描述中指出,它是低效的(因此对于使用反射的用户来说速度较慢)。如果您有其他表达方式,请提出建议?

人们是否应该使用反射与使反射本身更快是正交的。我同意人们应该尽量使用类型提示,但很多人没有时间去弄清楚/不知道如何正确使用/没有意识到这一点,所以当然任何针对这些情况的改进都将是受欢迎的?

您还没有回答我的问题:是否希望将所有内容合并到一个单独的反射性能改进条目中,还是不希望?

0 投票

评论者:alexmiller

此条目的标题是“优化反射过程中的参数装箱”。这是一个解决方案,而不是问题。我正在寻找的是类似“带有装箱参数的反射速度慢”这样的标题,以及以一些示例代码开始描述,这些代码可以证明问题的存在。(这些示例代码通常也是补丁中应包含的测试的优秀模板。)

我还希望您提供证据表明您所提出的更改能解决此问题。对于性能问题,我具体寻找的是前后基准测试结果,最好是使用criterium这样的测试工具,这能让我有信心这些收益是真实的。

从优先级的角度来看,我不认为反射性能是一个高优先级问题,因为最好的答案是可能:不要使用反射。尽管如此,我愿意考虑它,尤其是在存在难以移除的反射或反射发生时特别不明显的情况下。

关于您的最后一个问题,我们更倾向于考虑个别问题而不是“一大堆的变化”,因此分开处理会更好。

0 投票
by
参考资料:https://clojure.atlassian.net/browse/CLJ-1866(由mikera报告)
...