2014-10-06 67 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

相關問題