使用迭代

时间:2017-02-26 19:42:19

标签: java clojure garbage-collection

对重复的道歉,但我还没有能够通过阅读其他帖子来解决这个问题。我正在尝试运行计算密集的迭代算法。下一个迭代由函数" update"给出。我通过

收集所有迭代
(def iterates (doall (take 1000 (iterate update initial-state))))

其中initial-state是我正在初始化算法的零迭代。不幸的是,我无法提供最小的例子......更新是一个非常复杂的功能,它将地图数据结构作为输入并输出更新的地图数据结构。代码在最多800次的总迭代中运行良好,但随后产生更大的误差。一般意见认为仅仅增加垃圾收集器可用的大小是不够的,因为这是一个更深层问题的症状(也许)。在其他帖子中,所提出的问题非常具体,但我的更新功能非常复杂。那么如何在这里提供的一般性中解决这个问题呢?我可以使用某些工具实用程序吗?

  1. 由java.lang.OutOfMemoryError引起 超出GC开销限制

           Double.java:  519  java.lang.Double/valueOf
          Numbers.java:  611  clojure.lang.Numbers$DoubleOps/multiply
          Numbers.java:  148  clojure.lang.Numbers/multiply
              core.clj:   21  ssm4clj.core/corr
              core.clj:    6  ssm4clj.core/corr
              core.clj:   42  ssm4clj.core/innovation
              core.clj:   40  ssm4clj.core/innovation
              core.clj: 2522  clojure.core/partial/fn
              core.clj: 2646  clojure.core/map/fn
          LazySeq.java:   40  clojure.lang.LazySeq/sval
          LazySeq.java:   49  clojure.lang.LazySeq/seq
               RT.java:  521  clojure.lang.RT/seq
              core.clj:  137  clojure.core/seq
              core.clj: 2654  clojure.core/map/fn
          LazySeq.java:   40  clojure.lang.LazySeq/sval
          LazySeq.java:   49  clojure.lang.LazySeq/seq
             Cons.java:   39  clojure.lang.Cons/next
               RT.java:  688  clojure.lang.RT/next
              core.clj:   64  clojure.core/next
         protocols.clj:  168  clojure.core.protocols/fn
         protocols.clj:  124  clojure.core.protocols/fn
         protocols.clj:   19  clojure.core.protocols/fn/G
         protocols.clj:   31  clojure.core.protocols/seq-reduce
         protocols.clj:   75  clojure.core.protocols/fn
         protocols.clj:   75  clojure.core.protocols/fn
         protocols.clj:   13  clojure.core.protocols/fn/G
              core.clj: 6545  clojure.core/reduce
              core.clj: 6527  clojure.core/reduce
              core.clj:  347  ssm4clj.core/mean-conditional
              core.clj:  319  ssm4clj.core/mean-conditional
                  REPL:  332  ipp4clj.multiplexing/update-single-gp-mean
                  REPL:  329  ipp4clj.multiplexing/update-single-gp-mean
    

1 个答案:

答案 0 :(得分:1)

赞同@ StefanKamphausen的评论。我认为jvisualvm也会帮助你很多。 Here是一种使用方式。