Java: исключение OutOfMemoryError и freeMemory ()

У меня есть следующая тестовая программа:

public static void main(String[] args)
{       
    HashMap<Integer, String> hm = new HashMap<Integer,String>(); 
    int i = 1;  
    while(true)
    {
        hm.put(i, "blah");
        i++;
        System.out.println("############"); 
        System.out.println("Max mem: " + Runtime.getRuntime().maxMemory()); 
        System.out.println("Total mem: " + Runtime.getRuntime().totalMemory()); 
        System.out.println("Free mem:" + Runtime.getRuntime().freeMemory());
    }
}

Если я запускаю эту программу, я получаю следующий результат:

...

    ############
    Max mem: 8060928

    Total mem: 8060928

    Free mem:334400

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.util.HashMap.addEntry(Unknown Source)
        at java.util.HashMap.put(Unknown Source)
        at Test.main(Test.java:14)

Почему я получаю исключение «OutOfMemoryError», хотя метод freeMemory () возвращает что там свободной памяти больше ??? Есть ли способ использовать все функции freeMemory ()?

6
задан Alex Abdugafarov 8 December 2011 в 11:23
поделиться