Ниже приведен фрагмент кода для проверки памяти
public class TestFreeMemory {
public static void main(String ... args){
Runtime rt = Runtime.getRuntime();
System.out.println("Free Memory (Before GC): " + rt.freeMemory());
rt.gc();
System.out.println("Free Memory (After GC1): " + rt.freeMemory());
rt.gc(); // Second time to ensure results are consistent
// MAY BE has collected all non-reachable objects
System.out.println("Free Memory (After GC2): " + rt.freeMemory());
String s = new String("abcd");
Integer i = new Integer(12345);
System.out.println("Free Memory (After String Creation): " + rt.freeMemory());
// Why is freeMemory not reflecting the memory consumed by two objects
}
}
и вывод
Free Memory (Before GC): 1859672
Free Memory (After GC1): 1911768
Free Memory (After GC2): 1911768
Free Memory (After String Creation): 1911768
Почему freeMemory не отражает память, занятую двумя объектами?
Чтобы быть более понятным, вопрос в том, что вызов getMemory () не показывает ожидаемый результат, даже если два объекта созданы и не связаны с GC.Два вызова GC выполняются только для того, чтобы убедиться, что номера вызовов getMemory () правильные ... и, кстати, нет вызова GC после создания объектов ... так что, пожалуйста, обратите внимание, что я не пытаюсь получить GC после создания объектов..