从OCaml中的软内存不足错误中恢复

重复

我正在OCaml中编写一个符合ISO标准的Prolog系统。为了符合ISO / IEC 13211-1:1995,实现必须正确处理内存不足的情况:

7语言概念和语义

7.12错误

7.12.2错误分类

h)当处理器没有足够的资源来完成执行时,在执行的任何阶段都将出现资源错误。它具有以下形式:resource_error(Imp_dep_atom)其中Imp_dep_atom表示依赖于实现的术语。

因此,符合ISO的Prolog系统必须提供以下三个功能:

  1. resource_error(memory) 在堆空间用完时抛出。
  2. resource_error(stack) 在调用栈用完时抛出。
  3. 可以使用内置的Prolog捕获这两个异常catch/3

到现在为止还挺好!借助“今天的技巧:带有Gc警报的内存限制” [discuss.ocaml.org],我能够实施(应用程序级别)内存限制。

但是,当我连续多次运行特定查询(需要将〜60%的内存指定为软限制)时,发生了一些有趣的事情:每隔一段时间我就会得到一个答案,而每隔一段时间我就会耗尽内存。

就ISO一致性而言,这种行为还可以,但是我宁愿每次都得到一个答案而不是每隔一段时间就得到一个答案。h!

这应该是可行的,特别是如果限制我命中(在OCaml的水平自我强加的)。

所以:我该如何强迫OCaml GC做更多(甚至更多)的工作Gc.compact

帕斯卡·库克(Pascal Cuoq)

您可能正在寻找类似的东西:

Gc.set {Gc.get () with Gc.space_overhead = 40}

Gc.compact是一种解决方案:在调用GC时,GC会做一些工作以释放空间。而且Gc.compact,为了释放更多的内存,您不能让GC一次性完成更多的工作之后Gc.compact (),只有实时数据存在于由OCaml保留用于堆的内存块中,如果保留的块数超过实际需要的数量,则释放了不必要的块,依此类推。

您想要的可能是GC永久性地花费更多时间以使用更少的内存。您可以通过设置space_overhead参数来获得该行为max_overhead有关详细信息,请参见OCaml文档相关章节

类型控制= {…mutable space_overhead:int; (*
主GC速度是通过此参数计算的。这是将被“浪费”的内存,因为GC不会立即收集无法访问的块。它表示为用于实时数据的内存的百分比。GC可以工作如果space_overhead较小,则更多(使用更多的CPU时间并更热切地收集块),默认值:80。

同一章中记录的其他GC参数也可能间接影响内存消耗。这一切都取决于您愿意进行哪些交易以换取更少的内存使用量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

BitmapFactory中的内存不足错误

来自分类Dev

symfony中的内存不足错误

来自分类Dev

Matlab中的mvregress的“内存不足”错误

来自分类Dev

Imageview中的Android内存不足错误

来自分类Dev

Android Studio中的内存不足错误

来自分类Dev

golang:无法从内存不足崩溃中恢复

来自分类Dev

无法恢复的错误。mremap():失败:io_realm_internal_SharedGroup.cpp行188中的内存不足

来自分类Dev

Scikit学习MultinomialNB中的内存不足错误

来自分类Dev

增加堆以避免WEKA中的内存不足错误

来自分类Dev

翻新中的多个队列会导致内存不足错误?

来自分类Dev

gridView Android Eclipse中的内存不足错误

来自分类Dev

增加堆以避免WEKA中的内存不足错误

来自分类Dev

内核中的“ while” /“ for”循环导致CUDA内存不足错误?

来自分类Dev

避免递归python函数中的“内存不足”错误

来自分类Dev

内存不足,Android 5中的图像

来自分类Dev

TensorFlow中的RNN模型内存不足

来自分类Dev

Listview中的图像内存不足

来自分类Dev

内存不足,Android 5中的图像

来自分类Dev

OutOfMemoryError:IntelliJ中的内存不足?

来自分类Dev

Listview中的图像内存不足

来自分类Dev

IBM Websphere 8.5.5.7中的内存不足

来自分类Dev

nifi中的JVM内存不足异常

来自分类Dev

内存不足错误-尝试使用Win API检查ErrorHandler中的内存使用情况

来自分类Dev

在内存vb.net中创建大列表时出现内存不足错误

来自分类Dev

内存不足错误-尝试使用Win API检查ErrorHandler中的内存使用情况

来自分类Dev

getDrawable()的内存不足错误

来自分类Dev

Fontconfig错误-“内存不足”

来自分类Dev

mysql内存不足错误

来自分类Dev

NetBeans内存不足错误

Related 相关文章

热门标签

归档