衡量Clojure程序使用多少内存的最佳方法是什么?
我如何测量Clojure程序使用了多少内存 我注意到,即使是小程序,比如说衡量Clojure程序使用多少内存的最佳方法是什么?,clojure,jvm,memory-profiling,Clojure,Jvm,Memory Profiling,我如何测量Clojure程序使用了多少内存 我注意到,即使是小程序,比如说 (println "Hello World") 根据时间(GNU时间),每秒可以消耗数十兆的RAM 还有其他类似的工具 有没有正确的方法来检测Clojure程序的内存量 真的需要吗 如何限制Clojure程序的内存使用? 是否可以说“占用的内存不超过1MB”Clojure在JVM上运行,这样您就可以检查它使用了多少内存,并像在Java中一样限制它的内存 检查内存使用情况: final double freeMemory
(println "Hello World")
根据时间(GNU时间),每秒可以消耗数十兆的RAM
还有其他类似的工具
有没有正确的方法来检测Clojure程序的内存量
真的需要吗
如何限制Clojure程序的内存使用?
是否可以说“占用的内存不超过1MB”Clojure在JVM上运行,这样您就可以检查它使用了多少内存,并像在Java中一样限制它的内存 检查内存使用情况:
final double freeMemory = Runtime.getRuntime().freeMemory() / (double) 1024;
final double totalMemory = Runtime.getRuntime().totalMemory() / (double) 1024;
final double usedMemory = totalMemory - freeMemory;
在Clojure中(请原谅我糟糕的习语技能,我还是Clojure的初学者)
(您可以使用Java interop轻松地转换为Clojure,但不确定是否已经有用于此的Clojure库)
:
java-Xmx
例如:
java-Xmx1024m
将JVM限制为1Gib。Clojure的内存占用受JVM大小的限制。Clojure是一种很棒的语言,但是如果你特别需要一个运行在1MB以下的程序,你应该看看其他语言。@user100464:好的,也许你是对的,但是20MB怎么样?我建议你写一个Clojure程序,打印“hello world”,然后暂停阅读或线程睡眠或其他什么。暂停时,使用可用的操作系统工具查看正在使用的内存量。@user100464:为什么这么复杂?您可以只执行time-v
,或者使用jmap
,这根本不是问题所在。问题是如何将程序的内存限制在20MB以下默认值为1G,除非您的ram超过4GB,并且限制为物理内存的25%。很明显,-Xmx开关控制JVM使用多少堆。它不控制总内存占用。如果OP有兴趣在1MB(甚至20MB)以下运行,非堆内存也将很重要。不确定OP是否真的询问他的代码需要多少v.s。JVM分配了多少,但在后一种情况下,我不需要从分配的内存中减去使用的内存。
(float (/ (- (-> (java.lang.Runtime/getRuntime) (.totalMemory)) (-> (java.lang.Runtime/getRuntime) (.freeMemory))) 1024))
java -Xmx<memory>