为了性能和安全性,我想实现一个固定大小的向量,它既不可变又专门化(我需要快速算术)。我的第一个想法是使用@specialized
注释(因为我需要整数和实数)。
这是第一次尝试:
package so
class Vec[@specialized A] private[so] ( ary: Array[A] ) {
def apply( i: Int ) = ary(i)
}
但是,当我用 分析生成的字节码时javap
,我可以看到元素仍然被装箱。例如:
public double apply$mcD$sp(int);
Code:
0: aload_0
1: iload_1
2: invokevirtual #33; //Method apply:(I)Ljava/lang/Object;
5: invokestatic #83; //Method scala/runtime/BoxesRunTime.unboxToDouble:(Ljava/lang/Object;)D
8: dreturn
看起来数组不是专门的,这看起来很傻,因为数组是专门在 JVM 上的。
我还能做些什么来达到我的目标吗?