避免Mono加密GC错误消息。

4
我目前在Mono (Mac OSX)上运行一个程序,该程序读取一个非常大的数据文件,并在聚合后创建摘要统计信息。但是,在程序的某个时刻,我突然收到以下错误消息:垃圾收集器无法为主堆区分配16384字节的内存。我本来希望能收到OOM异常或其他有助于解决问题的信息。我尝试通过设置 max-heap-size 为4g 来增加最大堆大小,但实际上它告诉我需要将它设置为整数。当我手动输入正确数量的零时,程序在执行开始时会导致gdb抛出错误。让我感到困扰的是,在代码中断的这个特定部分,计算机上应该有16384字节可用,我认为它应该能够很好地进行GC并获取更多内存。是否有任何人知道如何解决这个问题?
1个回答

3
如果您使用的是2.10.8或更高版本的mono,您可以尝试使用更先进的sgen垃圾收集器来执行mono应用程序,它不像默认的GC那样保守。
它可以解决我遇到的一些内存泄漏问题,也许您正在遇到相关问题。
要使用sgen运行,您必须确保已安装mono-runtime-sgen,然后在执行程序时使用以下命令行参数:
mono --gc=sgen YourProgram.exe

谢谢!不幸的是,我有一些问题仅在Boehm中出现,还有一些问题仅在SGEN中出现(例如:https://bugzilla.xamarin.com/show_bug.cgi?id=25069)。但目前我回到了Boehm,因为至少已经开发了一些解决方法。 - evolvedmicrobe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接