爲什麼Groovy(1.8.0版)在64位模式下使用更多的內存?據我所知,是的,64位使用更大的指針,有時可能會佔用兩倍的內存,但是與64位模式相比,Groovy可以佔用多達2000%的內存,而32位則是多了。Groovy 64位內存消耗
只是一個簡單的測試,我下面可能會解釋一些東西。這個測試(下面的代碼)並不是作爲速度基準測試,而僅僅是爲了在不同的JVM設置中得到一個Groovy中內存使用的例子。
運行下面的代碼時,編譯並運行java.exe而不是groovy.exe,它使用17MB的內存。當在64位JVM上運行完全相同的代碼時,它會消耗430MB的內存,即使使用CompressedOops,它的使用也會超過300MB。
與Java的快速比較,儘管我仍然希望Groovy使用比原生Java更多的內存。剛剛修改爲純Java的相同代碼需要64位模式下的8MB內存和32位模式下的4MB內存。
Groovy中有錯誤嗎?或者我錯過了什麼?
class MemoryTest {
static main(args) {
double result = 0.00
long startTime = System.currentTimeMillis()
long endTime = System.currentTimeMillis()
for (warmup in 1..5) {
result = 0.00
startTime = System.currentTimeMillis()
for (i in 1..1000000) {
result += (34.673*i)/(Math.sqrt(31.92**42.42))
}
endTime = System.currentTimeMillis()
}
println "Result: ${result}"
println "Time taken: ${(endTime-startTime)/1000}"
}
}
你如何測量程序使用的內存量? – 2011-05-09 10:55:19
在Windows 7中同時使用Java VisualVM和任務管理器 – pieterk 2011-05-09 11:31:21
兩者都不會告訴你是否實際使用了所有內存,或者垃圾收集器是否只是懶惰。如果您使用-Xmx 64m運行程序,該程序實際上是否會產生OutOfMemoryError? – 2011-05-09 11:46:54