Получение Java из памяти ошибки?хотя я дал достаточно начальный и максимальный объем памяти для JVM - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть приложение, которое будет использовать хэш-карты размером 300 миллионов. Для этого я инициализировал JVM с начальным и максимальным размером кучи 16 ГБ, т. Е. (Java -Xms16384M -Xmx16384M), но я получаю java OutOfMemoryError. На моей машине установлено 32 ГБ ОЗУ с установленной операционной системой RedHat Linux. Я заметил, что JVM использует только 25% оперативной памяти из «верхней» команды в Linux, то есть 8 ГБ, хотя я установил его на 16 ГБ, он использует только 8 ГБ.

Я хочу знать, что если JVM ограничивает ОЗУ?

Как настроить JVM для использования заданного минимального и максимального размера кучи?

Ответы [ 3 ]

1 голос
/ 15 декабря 2011

Можете ли вы попробовать эту программу?

System.out.println("Max memory "+Runtime.getRuntime().maxMemory()/100 /1000+" MB.");
int mb = 0;
try {
    List<byte[]> bytes = new ArrayList<>();
    while (true) {
        bytes.add(new byte[1000 * 1000]);
        mb++;
    }
} catch (OutOfMemoryError expected) {
}
System.out.println("OOME after " + mb + " MB allocated");

что он печатает для ваших настроек? За -mx8g я получаю

Max memory 7635 MB.
OOME after 7025 MB allocated

Для -mx12g Я получаю

Max memory 11453 MB.
OOME after 10012 MB allocated

и с -mx12g -XX:MaxNewSize=512m я получаю

Max memory 12705 MB.
OOME after 12863 MB allocated
0 голосов
/ 15 декабря 2011

Сборщику мусора тоже нужна часть кучи (почти половина ее, если большая часть ваших вещей принадлежит молодому поколению, которое обрабатывается копирующей коллекцией);эта память останется нетронутой для использования GC.

0 голосов
/ 15 декабря 2011

Можете ли вы опубликовать трассировку стека исключений?Если опубликованные вами цифры верны, возможно, вам не хватает постоянной памяти (постоянные ошибки), и в этом случае вам также необходимо добавить -XX:PermSize и / или -XX:MaxPermSize флаги.Какую версию JVM вы используете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...