Clojureのベクタのメモリ使用量
(vector-of :int)を使えば普通の配列を使った場合の1.35倍、普通のベクタとIntegerを使った場合は7.32倍くらいになる。まぁ全然OKですね。
(defn current-total-memory-usage [] (System/gc) (- (.. Runtime getRuntime totalMemory) (.. Runtime getRuntime freeMemory))) (defmacro memory-usage [& exprs] `(let [pre# (current-total-memory-usage)] ~@exprs (- (current-total-memory-usage) pre#))) user> (memory-usage (def v (int-array 1000000))) 4000040 user> (def v nil) #'user/v user> (memory-usage (def v (into [] (range 1000000)))) 29274744 user> (def v nil) #'user/v user> (memory-usage (def v (into (vector-of :int) (range 1000000)))) 5419552