ich eine Funktion in Clojure Schreiben der In-Memory-Größe eines geparsten JSON zu schätzen, so etwas wie:Wie groß ist die Größe eines Clojure-Schlüsselworts?
(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
)))
Offensichtlich für clojure.lang.PersistentVector
, ich brauche werde java.lang.String
in Gemeinkosten, etc. hinzufügen
Allerdings bin ich mir nicht sicher, wie die In-Memory-Größe einer clojure.lang.Keyword
, die keyword-size
-Funktion im obigen Beispiel zu finden. Wie speichert Clojure Schlüsselwörter? Sind sie konstante Größe ähnlich einer C++ enum
, oder sind sie ein Spezialfall von java.lang.String
, die von der Länge abhängen?
Für Strings müssten Sie berücksichtigen, welche Java-Version Sie ausführen. Java 9 hat eine Optimierung für den String-Speicher AFAIK. Gute Frage anders. – nha