我如何測量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