我用Clojure寫一個函數來估計內存大小解析的JSON的,是這樣的:Clojure關鍵字的內存大小是多少?
(defn object-size
[object]
(cond
(sequential? object)
(reduce + (map object-size object))
(map? object)
(reduce
(fn [total [k v]]
(+ total (keyword-size k) (object-size v)))
0
object)
:else
(case (type object)
java.lang.Long 8
java.lang.Double 8
java.lang.String (* 2 (count object))
;; other data types
)))
顯然我需要在管理費用增加對clojure.lang.PersistentVector
,java.lang.String
等
但是,我不確定如何在上面的示例中找到clojure.lang.Keyword
,keyword-size
函數的內存大小。 Clojure如何存儲關鍵字?它們的大小是否與C++ enum
類似,還是它們是依賴於長度的java.lang.String
的特例?
對於字符串,您必須考慮您運行的是哪個Java版本。 Java 9對字符串內存AFAIK進行了優化。 另有一個好問題。 – nha