(require '[clojure.string :as str])
;;; Twitter Commons
(merge-env! :dependencies '[[com.twitter.common/objectsize "0.0.12"]])
(->> (range 10)
(map (juxt identity #(com.twitter.common.objectsize.ObjectSizeCalculator/getObjectSize (int-array (range %))))))
;; => ([0 16] [1 24] [2 24] [3 32] [4 32] [5 40] [6 40] [7 48] [8 48] [9 56])
(->> (range 10)
(map (juxt identity #(com.twitter.common.objectsize.ObjectSizeCalculator/getObjectSize (long-array (range %))))))
;; => ([0 16] [1 24] [2 32] [3 40] [4 48] [5 56] [6 64] [7 72] [8 80] [9 88])
(->> (range 10)
(map #(let [s (-> % (repeat \a) str/join)]
[(count s) (com.twitter.common.objectsize.ObjectSizeCalculator/getObjectSize s)])))
;; => ([0 40] [1 48] [2 48] [3 48] [4 48] [5 56] [6 56] [7 56] [8 56] [9 64])
(->> (range 10)
(map #(let [s (-> % (repeat \a) str/join)]
[(count s) (com.twitter.common.objectsize.ObjectSizeCalculator/getObjectSize (re-pattern s))])))
;; => ([0 168] [1 200] [2 224] [3 232] [4 800] [5 824] [6 824] [7 840] [8 840] [9 864])
(->> [(java.net.URL. "ftp://gnu.org:21")
(java.net.URL. "http://example.com")
(java.net.URL. "http://example.com/")
(java.net.URL. "http://example.com:8888/")]
(map #(com.twitter.common.objectsize.ObjectSizeCalculator/getObjectSize %)))
;; => (288 240 248 320)
;;; https://github.com/dweiss/java-sizeof
(merge-env! :dependencies '[[com.carrotsearch/java-sizeof "0.0.5"]])
(->> (range 10)
(map (juxt identity #(com.carrotsearch.sizeof.RamUsageEstimator/sizeOf (int-array (range %))))))
;; => ([0 16] [1 24] [2 24] [3 32] [4 32] [5 40] [6 40] [7 48] [8 48] [9 56])
;;; Java Object Layout
(merge-env! :dependencies '[[org.openjdk.jol/jol-core "0.7.1"]])
(.toPrintable (org.openjdk.jol.info.GraphLayout/parseInstance (object-array [1 "aaa" 5 (java.net.URL. "http://example.com/")])))
;; java.lang.Long@21d03963d, java.lang.String@3f3049c4d, java.lang.Long@e8eb5f1d, java.net.URL@3ee4d4a7d object externals:
;; ADDRESS SIZE TYPE PATH VALUE
;; 649b384f8 24 java.lang.Long <r1> 1
;; 649b38510 1568504 (something else) (somewhere else) (something else)
;; 649cb7408 24 java.lang.Long <r3> 5
;; 649cb7420 4203594488 (something else) (somewhere else) (something else)
;; 744593718 24 java.lang.String <r2> (object)
;; 744593730 24 [C <r2>.value [a, a, a]
;; 744593748 87739632 (something else) (somewhere else) (something else)
;; 749940438 24 sun.net.www.protocol.http.Handler <r4>.handler (object)
;; 749940450 473696 (something else) (somewhere else) (something else)
;; 7499b3eb0 64 java.net.URL <r4> (object)
;; 7499b3ef0 664 (something else) (somewhere else) (something else)
;; 7499b4188 24 java.lang.String <r4>.protocol (object)
;; 7499b41a0 24 [C <r4>.protocol.value [h, t, t, p]
;; 7499b41b8 24 java.lang.String <r4>.host (object)
;; 7499b41d0 40 [C <r4>.host.value [e, x, a, m, p, l, e, ., c, o, m]
;; 7499b41f8 24 java.lang.String <r4>.file (object)
;; 7499b4210 24 [C <r4>.file.value [/]
;; more info: https://www.infoscoop.org/blogjp/2014/06/16/java-objects-memory-structure/