Java 使用BuffereImage创建非常大的图像文件,这取决于编译和计算机

Java 使用BuffereImage创建非常大的图像文件,这取决于编译和计算机,java,image,image-processing,performance,bufferedimage,Java,Image,Image Processing,Performance,Bufferedimage,我试图用Java创建一个非常大的图像,如下所示: BuffereImage bi=新的BuffereImage(582401664,BuffereImage.TYPE_INT_RGB) 显然,图像非常大 现在我遇到的问题是,它似乎在某些计算机上100%工作良好,但在其他计算机上工作非常缓慢(不,这与规格无关) 我最重大的突破是在Eclipse中,IDE拒绝实际显示图像,而是在其中一台显示图像非常慢的计算机上抛出了一个错误(调整图像大小等需要相当长的时间): 线程“AWT-EventQueue-0

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

BuffereImage bi=新的BuffereImage(582401664,BuffereImage.TYPE_INT_RGB)

显然,图像非常大

现在我遇到的问题是,它似乎在某些计算机上100%工作良好,但在其他计算机上工作非常缓慢(不,这与规格无关)

我最重大的突破是在Eclipse中,IDE拒绝实际显示图像,而是在其中一台显示图像非常慢的计算机上抛出了一个错误(调整图像大小等需要相当长的时间):

线程“AWT-EventQueue-0”java.lang.OutOfMemoryError中出现异常:java堆空间

这个错误的另一个有趣的因素是,即使在它运行缓慢的计算机上,我也可以调整它所在的窗口的大小,直到不再调用paint函数,然后再将其变大,如果我做得“正确”,它将以100%的速度运行


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

问题在于Java虚拟机的堆大小——在将
抛出OfMemoryError的系统上,没有足够的堆大小

如果问题发生在运行Sun JVM的系统上,则可以使用更改JVM的堆大小


从Sun的Java 6开始,但是也可以被更改最小堆大小的
-Xms
选项和更改最大堆大小的
-Xmx
覆盖。默认情况下,堆大小的最小值是物理内存量的1/64,最大值是物理内存量的1/4。

问题在于Java虚拟机的堆大小——在抛出
OutOfMemoryError
的系统上没有足够的堆大小

如果问题发生在运行Sun JVM的系统上,则可以使用更改JVM的堆大小


从Sun的Java 6开始,但是也可以被更改最小堆大小的
-Xms
选项和更改最大堆大小的
-Xmx
覆盖。默认情况下,堆大小的最小值是物理内存量的1/64,最大值是物理内存量的1/4。

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

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


可能你唯一要做的就是给应用程序更多的堆空间;这是通过。

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

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


可能你唯一要做的就是给应用程序更多的堆空间;这是用.

完成的,我认为大约390MB(如果每个像素存储为3字节,则为280,但存储为int->4字节)。另外,如果垃圾收集是这里的问题,那么新的JRE(6更新14)附带了一个名为G1的新版本的垃圾收集器,这可能会带来很大的改进。如果不设置最大内存,默认值只有128M,不是吗?或者他们最近有没有搞砸了。不管是哪种方式,这个映像都将是巨大的,并且它上面的任何映像操作功能在内存成本上都将是同样昂贵的。默认值过去是ony 64MB,但它实际上取决于JRE版本。我想我在某个地方听说,它现在取决于有多少物理RAM。我想它大约是390MB(如果每个像素存储为3字节,则为280,但它存储为int->4字节)。另外,如果垃圾收集是这里的问题,那么新的JRE(6更新14)附带了一个名为G1的新版本的垃圾收集器,这可能会带来很大的改进。如果不设置最大内存,默认值只有128M,不是吗?或者他们最近有没有搞砸了。不管是哪种方式,这个映像都将是巨大的,并且它上面的任何映像操作功能在内存成本上都将是同样昂贵的。默认值过去是ony 64MB,但它实际上取决于JRE版本。我想我在某个地方听说,它现在取决于存在多少物理RAM。在创建BuffereImage或显示它时,您是否遇到此异常?另外,您是如何显示它的?我在创建映像时遇到异常您在创建BuffereImage或显示它时遇到此异常吗?另外,您是如何显示它的?我在创建映像时遇到了一个异常,我认为“为堆分配系统内存的一部分”是正面的。如果能听到问题中描述的那些系统的配置,我会很感兴趣。我认为“为堆分配部分系统内存”是正面的。如果能听到问题中描述的这些系统的配置,我会很感兴趣。