gpt4 book ai didi

list - 列表中的 Scala 与 F# 范围从 1 到 100000000

转载 作者:行者123 更新时间:2023-12-03 14:30:08 24 4
gpt4 key购买 nike

我已经在 F# 和 Scala 上编写了一个列表操作函数来比较性能。为了测试这个函数,我需要初始化一个从 1 到 100000000 的列表。

F#:

let l = [1..100000000];;

真实:00:00:32.954,CPU:00:00:34.593,GC gen0:1030,gen1:520,gen2:9

这有效。

斯卡拉:
Scala -J-Xmx2G 选项
val l = (1 to 10000000).toList // works

val l = (1 to 100000000).toList // no response long while and finally got java.lang.OutOfMemoryError: Java heap space

用 100000000 (100,000,000),长时间(一个小时)没有响应,CPU 利用率为 75% 到 90%,内存利用率为 2GB,最后得到
java.lang.OutOfMemoryError:Java 堆空间。

我在 Scala 中做错了什么吗?

最佳答案

请注意 val l = (1 to 100000000).toList创建一个新的 List包含原始内容 Range (1 to 100000000) ,因此可能会导致堆空间不足,以及垃圾收集器的大量触发。增加 -J-Xmx正如@krynio 所建议的那样。

然而,在不修改堆大小的情况下,考虑使用迭代器,特别是如果性能测试依赖于对列表的顺序迭代;像这样

(1 to 100000000).iterator
res0: Iterator[Int] = non-empty iterator

关于list - 列表中的 Scala 与 F# 范围从 1 到 100000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com