Criteriumライブラリを使用して式をベンチマークしようとしています。式は、それは私がOutOfMemoryError:GCオーバーヘッドの上限を超えました。Criterium
(criterium.core/bench (vec (range 10000000)))
を入力し、私は、これはヒープの最大サイズ(意味hereを見てきたように、しばらくして、私は
OutOfMemoryError GC overhead limit exceeded java.lang.Long.valueOf (Long.java:840)
を取得し、ベンチマークに
(vec (range 10000000))
です1 GB)は、データが収まるだけでは不十分で、ガベージコレクタは空き領域を確保しようとしますが、これを行うことはできません。私はbench
マクロは、デフォルトでは60回の実行を行うことhereを見てきましたので、しかし、以下のような式がちなみに
(dotimes [i 60] (time (vec (range 10000000))))
このエラーを生成しませんmicrobenchmarking、私は60回に設定します。
Criteriumを使用しているときにこの問題が発生するのはなぜですか。
編集:
{:max (.maxMemory (Runtime/getRuntime)), :total (.totalMemory (Runtime/getRuntime))}
出力
{:max 922746880, :total 212860928}
の下にコードREPL新鮮を開始するとき、私は(dotimes [i 60] (time (vec (range 10000000))))
または(criterium.core/bench (vec (range 10000000)))
を実行した後、それは
{:max 922746880, :total 922746880}
0123を出力
このコードを実行したときのヒープの大きさを知っていれば、回答者はこれを簡単に再現できます。 '{:max(.maxMemory(Runtime/getRuntime))、:total(.totalMemory(Runtime/getRuntime))}'の評価結果はどうですか? – amalloy
@amalloyありがとう、私はそれを含める質問を編集しました。 – Chris