Я изучаю 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