Memory Clojure中的内存分配跟踪

Memory Clojure中的内存分配跟踪,memory,clojure,heap,Memory,Clojure,Heap,在我的程序中,所有状态都保存在一个原子中的一个巨大映射中,该映射在每次迭代中都由一个纯函数负载进行更新。我已经确定堆大小正在增加,如何找到负责的代码?我尝试了VisualVM,但它提供了一般信息,我找不到我的状态的哪个部分在增长,哪个函数导致它增长 寻找常见的陷阱,比如忘记使用open、挂在序列头上等等 隔离代码的较小部分,并查看是否仍然使用JVisualVM看到相同类型的内存增长。如果击倒或嘲弄某件作品没有什么区别,那么就把它放回去,如果它有区别,那么你可以专注于这件事,弄清楚到底发生了什么

在我的程序中,所有状态都保存在一个原子中的一个巨大映射中,该映射在每次迭代中都由一个纯函数负载进行更新。我已经确定堆大小正在增加,如何找到负责的代码?我尝试了VisualVM,但它提供了一般信息,我找不到我的状态的哪个部分在增长,哪个函数导致它增长

  • 寻找常见的陷阱,比如忘记使用open、挂在序列头上等等

  • 隔离代码的较小部分,并查看是否仍然使用JVisualVM看到相同类型的内存增长。如果击倒或嘲弄某件作品没有什么区别,那么就把它放回去,如果它有区别,那么你可以专注于这件事,弄清楚到底发生了什么

  • 我不知道任何银弹工具或技术,它只是一个分而治之的过程,并思考您在代码中所做的事情

  • 寻找常见的陷阱,比如忘记使用open、挂在序列头上等等

  • 隔离代码的较小部分,并查看是否仍然使用JVisualVM看到相同类型的内存增长。如果击倒或嘲弄某件作品没有什么区别,那么就把它放回去,如果它有区别,那么你可以专注于这件事,弄清楚到底发生了什么


  • 我不知道任何银弹工具或技术,它只是一个分而治之的过程,思考你在代码中做了什么。

    你真的从内存错误中得到了
    ?这可能与您的代码无关,因为您可能看到JVM占用空闲内存以最小化GC数量的效果……同意上述评论。这是正常的,除非您观察到gc事件没有导致使用的堆减少。您是否确实得到了一个
    OutOfMemoryError
    ?这可能与您的代码无关,因为您可能看到JVM占用空闲内存以最小化GC数量的效果……同意上述评论。这是正常的,除非您观察到gc事件没有导致使用的堆减少。谢谢。自从我改变了(take…to)(vec)(take…)的几个用法之后,我还没有出现OutOfMemoryError。但是不得不说,VisualVM并没有指出你的代码中哪里做错了,只是你可能做错了什么。谢谢。自从我改变了(take…to)(vec)的几个用法之后,我还没有出现OutOfMemoryError(以…-但是不得不说,VisualVM并没有指出你的代码哪里做错了,只是指出了你可能做错了什么