我在scala中编写代码,我有几种方法可以返回非常大的数组(大小约为70000)。我正在运行以下形式:
object x {
def returnArray(y: Int): Array[Double] = {
... \\returns a large array
}
def calculateAverage(largeArray: Array[Double]) : Double = {
...\\ takes the large array and calculates the average number.
}
}
我注意到在运行jconsole时,eden和幸存者空间经常是GCing,并且没有使用太多的内存。然而,旧的gen空间的GC没有做任何事情,并且使用了大量的内存。
这可能是因为非常大的数组直接进入Old Gen空间然后因为数组是方法的返回类型而没有被解除引用吗?
答案 0 :(得分:0)
垃圾收集很昂贵。你的内存不足吗?如果没有,如果程序结束时所有内存都被释放回操作系统,为什么系统会运行如此昂贵的操作呢?
正如评论中提到的,你的数组大约是560 kByte(547 KiByte)。在大多数现代计算机上,保持这么多的内存比实际需要的时间长一点并不是一个严重的问题。因此,如果系统无论如何都不会产生太大影响,系统将避免运行如此昂贵的操作。 (对于典型的Scala计划,547 KiByte或多或少并不明显。)