为什么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