衡量 Clojure 程序使用多少内存的最佳方法是什么?

Igo*_*bin 5 jvm clojure memory-profiling

我如何衡量 Clojure 程序使用了多少内存?

我已经注意到,即使是小程序,也就是这样说

(println "Hello World")
Run Code Online (Sandbox Code Playgroud)

根据时间(GNU时间),ps 和其他类似的工具,可以消耗数十兆字节的RAM 。

是否有任何正确的方法来检测 Clojure 程序真正需要多少内存?

如何限制 Clojure 程序的内存使用量?是否可以说“占用不超过 1 MB”之类的内容?

m0s*_*it0 6

Clojure 在 JVM 上运行,因此您可以检查它使用了多少内存并像在 Java 中一样限制其内存。

检查内存使用情况:

final double freeMemory = Runtime.getRuntime().freeMemory() / (double) 1024;
final double totalMemory = Runtime.getRuntime().totalMemory() / (double) 1024;
final double usedMemory = totalMemory - freeMemory;
Run Code Online (Sandbox Code Playgroud)

在Clojure中(请原谅我拙劣的成语技巧,还是Clojure的初学者)

(float (/ (- (-> (java.lang.Runtime/getRuntime) (.totalMemory)) (-> (java.lang.Runtime/getRuntime) (.freeMemory))) 1024))
Run Code Online (Sandbox Code Playgroud)

(您可以使用 Java 互操作轻松转换为 Clojure,不确定是否已经有 Clojure 库)。

限制JVM最大内存

java -Xmx<memory>
Run Code Online (Sandbox Code Playgroud)

例如:java -Xmx1024m将 JVM 限制为 1 GiB。