就像负载测试一样,我在 Scala 中使用不同的数据结构。只是想知道如何工作甚至创建一个十亿长度的数组。1亿似乎没有问题,当然1,000,000,000这个数字并没有真正的魔力。我只是看看你能推多远。
我不得不在大多数测试中增加内存。export JAVA_OPTS="-Xms4g -Xmx8g"
// insanity begins ...
val buf = (0 to 1000000000 - 1).par.map { i => i }.toList
// java.lang.OutOfMemoryError: GC overhead limit exceeded
然而,预先分配一个 ArrayInt 效果很好。迭代和构建对象大约需要 9 秒。有趣的是,几乎用 ListBuffer 做任何事情似乎都会自动利用所有内核。但是,上面的代码不会完成(至少 8gb Xmx)。
我知道这不是一个常见的情况,我只是在胡闹。但是如果你必须把一些大的东西拉到内存中,有没有更有效的技术呢?具有类型的数组是否尽可能高效?