首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl6如何给MoarVM更多的内存?

perl6如何给MoarVM更多的内存?
EN

Stack Overflow用户
提问于 2018-08-03 16:49:06
回答 2查看 207关注 0票数 6

我必须对大约200万行数据进行数据分析,每一行大约250字节长。总共大约有500兆字节的数据。我正在使用4G内存的Virtualbox Linux上运行最新的Rakudo。

大约8个小时后,我因内存不足而引起MoarVM恐慌。如何将更多的内存分配给MoarVM?不幸的是,我无法将这2百万数据分割成块,并首先写入文件,因为数据分析的一部分需要整个2-m行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-03 23:27:40

我建议你分几个步骤解决你的问题:

  • 如果您还没有准备两个小的示例文件。把它们保持很小。我建议一个2000行长的文件和一个20,000行长的文件。如果您已经有一些类似于该长度的示例文件,那么这些文件就可以了。为每个文件运行您的程序,记录每个文件所用的时间和内存使用量。
  • 用持续时间和RAM使用的注释更新您的问题;如果可能的话,还可以添加到源代码的链接,如果可能的话,还可以更新示例文件。
  • 再次运行这两个示例文件,但使用解析器(如解释的这里 )。看看有什么东西可以看到和更新你的问题。

如果你不知道如何做这些事情,请在评论中问。

如果以上所有的操作都很简单,那么重复一个100,000行文件。

那么我们应该有足够的数据来给你更好的指导。

票数 4
EN

Stack Overflow用户

发布于 2018-08-04 16:18:48

MoarVM没有自己的内存上限(例如,JVM)。相反,只有当从操作系统请求内存并拒绝该请求时,它才会产生“内存不足”或“内存分配失败”错误。这可能是由于所配置的内存限制,或者实际上可能没有那么多可用的RAM/交换空间来满足所提出的请求(很可能如果您还没有配置限制)。

考虑到问题中的程序细节不多,很难就下一步要尝试什么提供具体的建议,但有些东西可能会有所帮助:

  • 如果您正在将文件中的数据处理为其他数据结构,并且有可能这样做,则可以延迟读取该文件(例如,for $fh.lines { ... }只需要将当前正在处理的行的Str保留在内存中,而my @lines = $fh.lines; for @lines { }将保留所有的Str对象)。
  • 这是ASCII文件中的数据还是拉丁文1中的数据?如果是这样,则在打开文件时传递一个:enc<ascii>或类似的。这可能会导致较小的内存表示。
  • 如果保留大量整数、数字或字符串数组,请考虑使用本机类型的数组。例如,如果您有my int8 @a并存储了一百万个元素,那么它需要1MB的内存;使用my @a就可以做到这一点,它们都是Scalar容器中的装箱对象,在一个64位的机器上,这个容器可以吃掉70 MB以上的内存。如果您有一个创建了许多实例的对象,并且可能能够使某些属性成为本机属性,则类似的情况也适用。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51677013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档