重複のお詫びですが、この問題は他の投稿を読むことで解決できませんでした。私は、計算集約的な反復アルゴリズムを実行しようとしています。次の反復処理を関数で「更新」を与えられたと私は初期状態は、私はアルゴリズムを初期化していたとゼロ番目の反復処理である繰り返し使用時のClojure GCのオーバーヘッド制限を超えました
(def iterates (doall (take 1000 (iterate update initial-state))))
を経由して、すべての繰り返し処理を収集しています。残念ながら、私は最小限の例を提供することはできません。更新は、地図データ構造を入力として取り込んで、更新された地図データ構造を出力するかなり複雑な関数です。コードは最大800回の反復で正常に実行されますが、以下のエラーが発生します。一般的な意見は、ガーベジコレクタが利用できるサイズを増やすだけでは不十分であるということです。これは深刻な問題(おそらく)の症状であるためです。他の投稿では、問題は非常に具体的ですが、私の更新機能は非常に複雑です。どのように私はここで提供された一般性でこれを解決するために行くことができますか?私が使用できる特定の工具ユーティリティはありますか?
java.lang.OutOfMemoryErrorを GCオーバーヘッドの制限に起因するは@ StefanKamphausenさんのコメントと一緒に行くために
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
1000個の状態がどれくらいのメモリを占有しますか?この大量のデータを保持するのに十分なRAMと、実行している計算によって作成された追加のゴミが足りない可能性はありますか? –
あなたはすべての州を必要としているのでしょうか、あるいは目標に達する州だけが必要でしょうか?あなたが行くときにあなたが州を捨てるために '落ちる 'と'取る 'を使うことができるのだろうか?あるいは '落ち込み 'と'最初のもの'を組み合わせたものでしょうか? –
@SamEstep、プロセスを「トップ」にすると、%MEM列のパーセンテージは問題のプロセスに対して約30です。 top、%MEMのドキュメントをチェックすると、利用可能な物理メモリの現在使用されているタスクの占有率が表示されます。このプロセスは私のRAMの30%しか使用していないと私は理解しています。 – Lindon