我如何测量Clojure程序使用多少内存?测量Clojure程序使用多少内存的最佳方法是什么?
我注意到,即使是很小的程序,也说让像
(println "Hello World")
可以消耗几十兆的内存,可根据时间(GNU时间),PS 和其他工具像那样。
是否有任何正确的方法来检测一个Clojure程序 真正需要多少内存?
如何限制Clojure程序的内存使用量? 是否可以说“不超过1 MB”?
我如何测量Clojure程序使用多少内存?测量Clojure程序使用多少内存的最佳方法是什么?
我注意到,即使是很小的程序,也说让像
(println "Hello World")
可以消耗几十兆的内存,可根据时间(GNU时间),PS 和其他工具像那样。
是否有任何正确的方法来检测一个Clojure程序 真正需要多少内存?
如何限制Clojure程序的内存使用量? 是否可以说“不超过1 MB”?
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初学者)
(float (/ (- (-> (java.lang.Runtime/getRuntime) (.totalMemory)) (-> (java.lang.Runtime/getRuntime) (.freeMemory))) 1024))
(你可以很容易地转换为Clojure中与Java的互操作,不确定是否已经有Clojure库)。
java -Xmx<memory>
例如:java -Xmx1024m
将限制JVM 1吉布。
默认值是1G,除非你有超过4GB的内存,它将限制到物理内存的25%。 – Sylwester 2014-10-06 13:53:08
要清楚,-Xmx开关控制JVM使用多少堆。它不控制总内存占用量。如果OP有兴趣在1MB(甚至20MB)以下运行,非堆内存也将变得重要。 – user100464 2014-10-06 14:38:35
好运让clojure运行在不到20 MB的空间 – noisesmith 2014-10-07 02:07:24
Clojure的内存占用量受JVM大小的限制。 Clojure是一门很棒的语言,但是如果你特别需要一个运行在1MB以下的程序,你应该看看其他语言。 – user100464 2014-10-06 12:16:52
@ user100464:好的,你可能是对的,但是说20MB呢? – 2014-10-06 14:32:07
我建议你写Clojure程序打印“你好世界”,然后暂停阅读或线程睡眠或其他东西。暂停时,使用可用的操作系统工具查看正在使用多少内存。 – user100464 2014-10-06 14:40:22