列表中的Scala与F#的范围为1到100000000

 经任萍 发布于 2022-12-13 23:57

我已经在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做错了吗?

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

    但是,如果不修改堆大小,请考虑使用迭代器,尤其是在性能测试依赖于列表上的顺序迭代时; 像这样

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

    2022-12-14 00:24 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有