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 在大多数(如果不是全部)问题中都是你的朋友 ;-)
我想实例化一个 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 在大多数(如果不是全部)问题中都是你的朋友 ;-)