Распределение памяти Java аномалия - PullRequest
0 голосов
/ 12 января 2019

Я изучаю Java из книги под названием «Java 2: Полный справочник».

Выход по книге: Всего памяти: 1048568 Начальная свободная память: 751392 Свободная память после сборки мусора: 841424 Свободная память после выделения: 824000 Память, используемая для выделения: 17424 Свободная память после сбора сброшенных целых чисел: 842640

Мой вывод: Всего памяти: 121634816 Начальная свободная память: 120142456 Свободная память после сборки мусора: 7677000 Свободная память после выделения: 7635040 Память, используемая для выделения: 41960 Свободная память после сбора сброшенных целых чисел: 7677960

Моя проблема - смелая часть, упомянутая выше. «Начальная свободная память», упомянутая в выходных данных книги, меньше, чем «свободная память после сбора мусора», тогда как в моих выходных данных «начальная свободная память» намного больше, чем «свободная память после сбора мусора».

class MemoryDemo
{
    public static void main(String[] args)
    {
        Runtime r = Runtime.getRuntime();
        long mem1, mem2;
        Integer someInts[] = new Integer[1000];

        System.out.println("Total memory is : " + r.totalMemory());

        mem1 = r.freeMemory();
        System.out.println("Initial free memory : " + mem1);

        r.gc();
        mem1 = r.freeMemory();
        System.out.println("Free memory after garbage collection : " + mem1);

        for(int i = 0; i < 1000; i++)
            someInts[i] = new Integer(i);

        mem2 = r.freeMemory();
        System.out.println("Free memory after allocation : " + mem2);

        System.out.println("Memory used by allocation : " + (mem1 - mem2));

        for(int i = 0; i < 1000; i++)
            someInts[i] = null;

        r.gc();
        mem2 = r.freeMemory();
        System.out.println("Free memory after collecting discarded integers :" + mem2);
    }
}

Мне нужно объяснение этого бита, и я прилагаю ссылку для загрузки книги в описании. Код находится на 406 странице книги. http://iiti.ac.in/people/~tanimad/JavaTheCompleteReference.pdf

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Объем памяти виртуальной машины Java не является фиксированным количеством. Вы можете установить его при запуске JVM. Настройка по умолчанию может варьироваться от реализации к реализации и от версии к версии. Значение по умолчанию может зависеть от размера фактической памяти компьютера.

0 голосов
/ 12 января 2019

Это не ошибка или ошибка. У вашего компьютера больше памяти, чем у автора книг на момент написания книги.

...