簡體   English   中英

列表中的Scala與F#的范圍為1到100000000

[英]Scala vs F# on List range from 1 to 100000000

我已經在F#和Scala上編寫了一個列表處理函數來比較性能。 要測試該功能,我需要將List初始化為1到100000000。

F#:

let l = [1..100000000];;

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

這有效。

Scala: 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會創建一個包含原始Range (1 to 100000000)內容的新List ,因此可能會導致堆空間不足,以及垃圾收集器的嚴重觸發。 @krynio建議增加-J-Xmx

但是,如果不修改堆大小,請考慮使用迭代器,尤其是在性能測試依賴於列表上的順序迭代時; 像這樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM