很抱歉第二次询问专业化问题,但我还不太了解到底发生了什么......
所以,我有一个项目(带有人工智能的五子棋游戏),我决定使用我自己的简单而肮脏的@在它的热门部分专门的 ad-hoc 集合,因为我必须在没有装箱的情况下存储原始类型。问题是这并没有真正的帮助,因为在jvisualvm
's Sampler 我清楚地看到
scala.runtime.BoxesRunTime.boxToShort()
当最佳移动搜索开始运行时会消耗数千毫秒。
项目:https
://github.com/magicgoose/G
omoku “收藏品”较差的文件: 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 ),它试图完成类似的事情(没有原始装箱的数据收集),但我不太明白它是如何在那里完成的。