对不起第二次问专业化,但我还没有很好的了解到底是怎么回事...
所以,我有一个项目(与AI的Gomoku游戏),并且我决定在它的热门部分使用我自己的简单和脏的@specialized ad-hoc集合,因为我必须在没有装箱的情况下存储原始类型。问题是,这并不能真正帮助,因为在jvisualvm
的采样我清楚地看到斯卡拉2.10.1和专业化(不能得到它的工作权利)
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),它试图完成类似的事情(没有原始装箱的数据收集),但我并不真正了解它是如何完成的。
糟糕。这太奇怪了。顺便说一句,我可以摆脱短和使用Int到处,并包装2 Ints到INT而不是包装2字节到短,这是肮脏的,但确定这个特定的应用程序,因为估值的范围无论如何有限。现在我会尝试一下,看看是否会有改进。 – 2013-03-11 14:27:52
我已经切换到Ints,现在没有拳击。 – 2013-03-11 15:11:28