【问题标题】:How to use .getObjectSize in Clojure?如何在 Clojure 中使用 .getObjectSize?
【发布时间】:2021-08-01 20:57:23
【问题描述】:

在 Clojure 中,确定地图大小的最佳方法是什么?导入java库“java.lang.instrument.Instrumentation”并使用.getObjectSize。但是,无法导入该库。请评论如何正确导入库。

; Load the instrumentation namespace to get access to its vars
(require '[java.lang.instrument.Instrumentation :as inst])

; Find the size of an object
(println "The size of a map is"
         (inst/getObjectSize {:ts 20200101170000219 :bid 108.730000 :ask 108.786000})
         "bytes")

【问题讨论】:

  • 使用java.lang.instrument.* 需要使Java 代理与您的程序一起运行。有an example in Clojure,但注意到getObjectSize 仅报告对象的大小,不包括它所引用的对象的图形。 Andy Fingerhut 下面的回答可能会更好地满足您的需求。
  • @SteffanWestcott 感谢您的评论。我们来看看 Clojure 中的一个例子。

标签: clojure clojure-java-interop


【解决方案1】:

我以前没有使用过那个 Java 库,但请注意,Clojure 中的许多集合都是使用许多 Java 对象实现的,即通常是指向许多其他对象的“根”对象。如果您想知道所有这些的大小,和/或创建显示其结构的图纸,我创建了一个名为 cljol 的库,可以做到这一点:https://github.com/jafingerhut/cljol

自述文件显示了使用示例和您可以预期的输出。顶层 README 中还有一个链接,指向使用该库创建的其他图像库,用于一些 Clojure 数据结构。

【讨论】:

  • 感谢您的评论。 cljol 是读取 Clojure 集合内容的绝佳工具。在我们的例子中,我们想读取 map 的大小并在内存映射中使用 map 的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多