【发布时间】:2018-08-18 09:51:01
【问题描述】:
我正在尝试评估哪种数据结构最能代表 Scala 中的稀疏向量。这些稀疏向量包含一个索引列表,以及每个索引的一个值。我实现了一个小基准,这似乎表明Array[(Long, Double)] 似乎比 2 个并行数组占用的空间要少得多。那是对的吗?我是否正确地进行了该基准测试? (如果我在某个地方做错了什么,我不会感到惊讶)
import java.lang.management.ManagementFactory
import java.text.NumberFormat
object TestSize {
val N = 100000000
val formatter: NumberFormat = java.text.NumberFormat.getIntegerInstance
def twoParallelArrays(): Unit = {
val Z1 = Array.ofDim[Long](N)
val Z2 = Array.ofDim[Double](N)
Z1(N-1) = 1
Z2(N-1) = 1.0D
println(Z2(N-1) - Z1(N-1))
val z1 = ManagementFactory.getMemoryMXBean.getHeapMemoryUsage.getUsed
val z2 = ManagementFactory.getMemoryMXBean.getNonHeapMemoryUsage.getUsed
println(s"${formatter.format(z1)} ${formatter.format(z2)}")
}
def arrayOfTuples(): Unit = {
val Z = Array.ofDim[(Long, Double)](N)
Z(N-1) = (1, 1.0D)
println(Z(N-1)._2 - Z(N-1)._1)
val z1 = ManagementFactory.getMemoryMXBean.getHeapMemoryUsage.getUsed
val z2 = ManagementFactory.getMemoryMXBean.getNonHeapMemoryUsage.getUsed
println(s"${formatter.format(z1)} ${formatter.format(z2)}")
}
def main(args: Array[String]): Unit = {
// Comment one or the other to look at the results
//arrayOfTuples()
twoParallelArrays()
}
}
【问题讨论】:
-
关于 Scala 需要注意的重要一点:名称的大小写很重要。因此
Z1的名称可能会混淆编译器(和普通读者)。除了少数例外,都遵循 Java 命名约定。 -
@BobDalgleish - 得分。
标签: scala performance performance-testing