У меня возникает очень странная проблема, которую я хотел бы воспроизвести в SSCCE, но я не могу.OutOfMemoryError перед достижением максимума кучи пространства?
Я запускаю свою программу в Java8 (32 бит) с помощью -Xmx1024m
, этот код загружает довольно большой файл (120 МБ) в массив байтов с использованием FileInputStream
.
Проблема в том, что, хотя в Java6 у меня не было проблем, в Java8 я получаю исключения OutOfMemoryError
, как только я пытаюсь загрузить его.
У меня все еще много свободного места, и я профилировал его, и я не вижу проблем.
Если я попытаюсь извлечь эту проблему в SSCCE, тогда она будет работать.
Я знаю, что Oracle избавился от PermGen, но как это может повлиять на мою программу?
Я также прочитал, что это может быть связано с проблемой фрагментации кучного пространства, но я попытался отладить его, профилировать и запустить цикл GC из профайлера непосредственно перед распределением памяти, и он все еще остается (я предполагаю, что цикл GC будет дефрагментировать пустое пространство)
первый, проверить сообщение о OOME, он не должен быть куча ограниченность пространства. во-вторых, используйте профилировщик, посмотрите, что потребляет (больше) память. – the8472
он не содержит никакого сообщения «null» – lqbweb
Выполняется то же самое, с тем же -Xmx1024m, но в 64 бит работает. – lqbweb