Создание очень больших файлов изображений с BufferedImage, странные проблемы в зависимости от компиляции и компьютера

StackOverflow https://stackoverflow.com/questions/961795

Вопрос

Я пытаюсь создать очень большое изображение на Java следующим образом:

Буферное изображение bi = новое буферное изображение (58240, 1664, буферное изображение.ТИП_INT_RGB);

очевидно, что изображение очень большое.

Теперь проблема, с которой я столкнулся, заключается в том, что, похоже, на некоторых компьютерах она работает нормально на 100%, но на других очень медленно (и нет, это НЕ имеет НИКАКОГО отношения к спецификациям).

Мой самый крупный прорыв произошел в Eclipse, IDE отказалась фактически отображать изображение и вместо этого выдала ошибку на одном из компьютеров, которая отображает изображение очень медленно (требуется значительное количество времени для изменения размера изображения и тому подобного):

Исключение в потоке "AWT-EventQueue-0" java.lang.Ошибка OutOfMemoryError:Пространство кучи Java

Другим интересным элементом ошибки является то, что даже на компьютерах, на которых она работает медленно, я могу изменять размер окна, в котором она находится, до тех пор, пока функция paint больше не будет вызываться, затем снова сделать ее большой, и если я сделаю это "правильно", она будет работать со скоростью 100%.

Не уверен, что вообще происходит, есть идеи?

Это было полезно?

Решение

Вашему приложению не хватает памяти - если я правильно рассчитал, это изображение занимает около 280 МБ.

Программы Java имеют максимальный объем памяти, который им разрешено использовать (пространство кучи), который фиксируется при запуске JVM, и то, как устанавливается это ограничение, зависит от реализации и версий JVM.Когда у вас заканчивается память или она близка к пределу, JVM будет тратить много времени на сборку мусора, что значительно замедлит ее работу.

Возможно, единственное, что вам нужно сделать, это предоставить приложению больше места в куче;это делается с помощью -Параметр командной строки Xmx.

Другие советы

Проблема заключается в размере кучи виртуальной машины Java - ее просто недостаточно в системах, которые запустили OutOfMemoryError.

Если проблема возникает с системами, работающими под управлением Sun JVM, можно изменить размер кучи JVM с помощью Параметры, специфичные для Sun JVM.

Начиная с Java 6 от Sun, значения по умолчанию для размера кучи определяются объемом системной памяти, но также может быть переопределен -Xms параметр, который изменяет минимальный размер кучи, и -Xmx это изменяет максимальный размер кучи.По умолчанию минимальный размер кучи равен 1/64 объема физической памяти, а максимальный - 1/4 объема физической памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top