使用BufferedImage创建非常大的图像文件,奇怪的问题取决于编译和计算机

twe*_*ypi 1 java performance bufferedimage image image-processing

我试图用Java创建一个非常大的图像,如下所示:

BufferedImage bi = new BufferedImage(58240,1664,BufferedImage.TYPE_INT_RGB);

显然图像非常大.

现在我遇到的问题是它似乎在某些计算机上运行良好100%但在其他计算机上运行得很慢(而且这与规格没有关系).

我最重大的突破来自Eclipse,IDE拒绝实际显示图像,而是在其中一台计算机上出现错误,这些计算机显示图像的速度非常慢(需要花费大量时间来调整图像大小等):

线程"AWT-EventQueue-0"中的异常java.lang.OutOfMemoryError:Java堆空间

错误的另一个有趣的元素是,即使在计算机上它运行缓慢,我也可以调整窗口的大小,直到不再调用绘制函数,然后再将其设置为大,如果我这样做,那么它运行100速度的百分比.

不知道发生了什么,有什么想法吗?

Mic*_*rdt 7

您的应用程序内存不足 - 如果我正确计算,该图像大约需要280MB.

Java程序具有允许使用的最大内存量(堆空间),这在JVM启动时是固定的,并且设置此限制的方式因JVM实现和版本而异.当您的内存不足或接近极限时,JVM将花费大量时间进行垃圾收集,这将大大减慢速度.

可能你唯一需要做的就是给应用程序更多的堆空间; 这是通过-Xmx命令行参数完成的.