Groovy 64-битное потребление памяти - PullRequest
0 голосов
/ 09 мая 2011

Почему Groovy (версия 1.8.0) использует гораздо больше памяти в 64-битном режиме?Насколько я понимаю, да, 64-битный использует более крупные указатели и иногда может занимать вдвое больше памяти, но Groovy может занять до 2000% больше памяти в 64-битном режиме по сравнению с 32-битным.

Просто простой тест, который я имею нижеможет объяснить что-то.Этот тест (код ниже) предназначен не для измерения скорости, а лишь для того, чтобы получить пример использования памяти в Groovy для различных установок JVM.

При запуске приведенного ниже кода скомпилируйте и запустите с java.exe, а неgroovy.exe, он использует 17 МБ памяти.При выполнении точно такого же кода на 64-битной JVM он потребляет 430 МБ памяти и даже с CompressedOops он использует более 300 МБ.

Просто быстрое сравнение с Java, хотя я все еще ожидаю, что Groovy будет использовать немного больше памятичем родная Java.Тот же код, только что модифицированный для чистой Java, занимает 8 МБ памяти в 64-битном режиме и 4 МБ в 32-битном режиме.

Есть ли ошибка в 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 голосов
/ 09 мая 2011

Похоже, что 64-битная JVM просто стремится использовать максимально разрешенную кучу, прежде чем выполнять большую работу GC. Это может быть связано с тем, что до недавнего времени большинство 64-битных систем были серверами, и такое поведение больше подходило для серверных систем. Максимальный размер кучи по умолчанию также больше в 64-битных системах .

...