如何解决在ocaml中调试多余的GC时间
我已经编写了B树的OCaml实现。它很慢,大约需要1分钟才能添加大约100k的小〜16字节记录。当我对实现进行概要分析时,我发现该程序将其大部分时间(〜58秒)用于垃圾回收。
具体功能是:
caml_garbage_collection,which consumes 58 seconds,of this:
caml_major_collection_slice consumes 63% and
caml_gc_dispatch consumes 23.5%
这种垃圾回收过多的原因可能是什么,我将如何对其进行调试?
解决方法
我最终使用了OCaml的内存探查器Spacetime,并按照此处的说明进行了解决:https://blog.janestreet.com/a-brief-trip-through-spacetime/
这是一次非常流畅的体验。我将问题确定为调试数据结构。我保留了所有条目的列表,作为对列表的可变引用,我对其进行了如下更新:
t.orig_items <- new_entry :: t.orig_items
执行此操作时,OCaml似乎会创建原始列表的副本。因此,以这种方式使用可变列表似乎不是一个好主意。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。