这是缓慢的代码
object Hello {
def main(args: Array[String]) = {
val ret = Array.fill[(Int, Int, Int)](8000000){(0, 0, 0)}
println(ret.size)
}
}
运行时间为 2 分钟。然后输出
java.lang.OutOfMemoryError: GC overhead limit exceeded
这是快速代码
object Hello {
def main(args: Array[String]) = {
val ret = Array.fill[Int](24000000){0}
println(ret.size)
}
}
运行 0.5 秒。
我的编译选项:
scalac Hello.scala
为什么差距这么大?
最佳答案
Array[Int]
是基元数组。
Array[(Int, Int, Int)]
是一个对象数组。
(您可以尝试使用 Array[java.lang.Integer]
,它也是一个对象数组。)
通常情况下,您的设置有问题
object Hello {
def main(args: Array[String]) = {
val ret = Array.fill[(Int, Int, Int)](8000000){(0, 0, 0)}
println(ret.size)
}
}
不需要很长时间https://scastie.scala-lang.org/4p4GpYbHSqm7K6U3hwLdYw
关于scala - 为什么 Scala 初始化元组数组很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62924191/