2014-10-06 54 views
4

我如何测量Clojure程序使用多少内存?测量Clojure程序使用多少内存的最佳方法是什么?

我注意到,即使是很小的程序,也说让像

(println "Hello World") 

可以消耗几十兆的内存,可根据时间(GNU时间),PS 和其他工具像那样。

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

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

+1

Clojure的内存占用量受JVM大小的限制。 Clojure是一门很棒的语言,但是如果你特别需要一个运行在1MB以下的程序,你应该看看其他语言。 – user100464 2014-10-06 12:16:52

+0

@ user100464:好的,你可能是对的,但是说20MB呢? – 2014-10-06 14:32:07

+0

我建议你写Clojure程序打印“你好世界”,然后暂停阅读或线程睡眠或其他东西。暂停时,使用可用的操作系统工具查看正在使用多少内存。 – user100464 2014-10-06 14:40:22

回答

2

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库)。

Limit JVM maximum memory

java -Xmx<memory> 

例如:java -Xmx1024m将限制JVM 1吉布。

+0

默认值是1G,除非你有超过4GB的内存,它将限制到物理内存的25%。 – Sylwester 2014-10-06 13:53:08

+1

要清楚,-Xmx开关控制JVM使用多少堆。它不控制总内存占用量。如果OP有兴趣在1MB(甚至20MB)以下运行,非堆内存也将变得重要。 – user100464 2014-10-06 14:38:35

+1

好运让clojure运行在不到20 MB的空间 – noisesmith 2014-10-07 02:07:24

相关问题