我想实现一个BufferedImage
课程,所以我添加了这个片段
BufferedImage bufferedImage = new BufferedImage(7232, 7204, BufferedImage.TYPE_INT_RGB);
但我得到了一个奇怪的例外
java.lang.OutOfMemoryError:Java堆空间
所以我需要知道:
我该如何解决?
答案 0 :(得分:1)
您需要确保以足够的堆空间启动运行此程序的JVM。命令行选项-Xmx设置jvm可用的最大堆数。例如:
java -Xmx 2048m
设置此参数的方法有多种,具体取决于您启动程序的方式。如果您直接从命令行启动它,则上述方法有效,但如果您使用的是Eclipse等IDE,则可能需要查看“运行”或“启动”配置。
但是,jvm可用的堆空间量有限制,由机器的系统属性(硬件约束)定义。
另请参阅How to deal with "java.lang.OutOfMemoryError: Java heap space" error (64MB heap size)进行深入讨论。
编辑: BufferedImage似乎在内存中加载位图,这可以使您的应用程序真正快速地占用内存。如果你想在渲染之前操作图像,这很好,但如果你只是想显示图像可能有点矫枉过正。 我在Java中处理图像的经验非常有限,我不知道在处理图像时允许降低内存消耗的任何类,但是Make a BufferedImage use less RAM?提出了一种解决方案,在读取时图像缩小,因此BufferedImages使用更少的内存。我不知道它是否有效,但它可能会指向正确的方向。
P.S。如果不是所有问题,Google都是您的朋友; - )