Groovy 64位内存消耗

时间:2011-05-09 10:38:21

标签: groovy jvm 32bit-64bit

为什么Groovy(版本1.8.0)在64位模式下使用了更多的内存?据我所知,64位使用较大的指针并且有时可能占用两倍的内存,但与32位相比,Groovy在64位模式下可以占用多达2000%的内存。

我在下面进行的简单测试可能会解释一些问题。此测试(下面的代码)不是作为速度基准测试,而只是为了获得Groovy中不同JVM设置的内存使用示例。

运行以下代码时,编译并运行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}"
    }
}

1 个答案:

答案 0 :(得分:0)

在执行大量GC工作之前,64位JVM看起来只是倾向于使用允许的最大堆。这可能是因为直到最近大多数64位系统都是服务器,这种行为更适合服务器系统。默认的最大堆大小也是larger on 64 bit systems