【发布时间】:2013-03-11 13:48:11
【问题描述】:
很抱歉第二次询问专业化问题,但我还不太了解到底发生了什么......
所以,我有一个项目(带有 AI 的五子棋游戏),我决定在它的热门部分使用我自己简单而肮脏的 @specialized ad-hoc 集合,因为我必须存储原始类型而不进行装箱。问题是这并没有真正的帮助,因为在jvisualvm的采样器中我清楚地看到了
scala.runtime.BoxesRunTime.boxToShort()
在最佳移动搜索开始运行时消耗 数千 毫秒。
项目:https://github.com/magicgoose/Gomoku
“收藏品”较差的文件:https://github.com/magicgoose/Gomoku/blob/master/src/magicgoose/gomoku/ai/SpecializedCollections.scala
导致拳击的方法(我认为是其中之一):
trait Indexed[@specialized T] extends Enumerable[T] {
@inline def length: Int
@inline def apply(i: Int): T
// ...
@inline final def findIndex(fun: T => Boolean) = {
@tailrec def find(i: Int): Int = {
if (i < length) {
if (fun(this(i))) i
else find(i + 1)
} else -1
}
find(0)
}
}
我看过另一个项目(debox:https://github.com/non/debox),它试图完成类似的事情(没有原始装箱的数据收集),但我不太明白它是如何完成的。
【问题讨论】:
标签: performance scala generics boxing scala-2.10