java 应用程序中的缓冲图像问题

Buffered image issue within java application

我想实例化一个 BufferedImage class ,所以我添加了这个片段

BufferedImage bufferedImage = new BufferedImage(7232, 7204, BufferedImage.TYPE_INT_RGB);

但我得到一个奇怪的异常

java.lang.OutOfMemoryError: Java heap space

所以我需要知道:

我该如何解决?

您需要确保启动运行此程序的 JVM 有足够的堆 space。命令行选项 -Xmx 设置 jvm 可用的最大堆数量。例如: java -Xmx 2048m

有多种设置此参数的方法,具体取决于您启动程序的方式。如果您直接从命令行启动上述方法,但如果您使用的是 IDE(例如 Eclipse),您可能需要查看 'run' 或 'launch' 配置。

但是,您可以提供给 jvm 的堆数量有限制 space,这是由您机器的系统属性(硬件限制)定义的。

另请参阅 How to deal with "java.lang.OutOfMemoryError: Java heap space" error (64MB heap size) 进行深入讨论。

编辑: BufferedImage 似乎将位图加载到内存中,这可以使您的应用程序真正快速地占用大量内存。如果您想在渲染之前操作图像,这非常有用,但如果您只想显示图像,则可能有点矫枉过正。 我在 Java 中处理图像的经验非常有限,我不知道有任何 class 可以在处理图像时降低内存消耗,但 Make a BufferedImage use less RAM? 提出了缩小图像尺寸的解决方案阅读后,您的 BufferedImages 使用更少的内存。我不知道它是否有效,但它可能会为您指明正确的方向。

P.S。 Google 在大多数(如果不是全部)问题中都是你的朋友 ;-)