2013-05-20 40 views
0

我想在Java应用程序中创建BufferedImage。用户可以更改图像的尺寸,我希望允许图像“尽可能大”。 如何检查创建BufferedImage是否会导致OutOfMemory异常并从中恢复?创建映像时避免OutOfMemory

+1

try/catch with OutOfMemoryException? – Sebastian

+1

@Sebastian'OutOfMemoryException'不存在。 'OutOfMemoryError'确实存在,并且不推荐捕获'Error'。 – afsantos

回答

1

使用Runtime.getRuntime().freeMemory()检查您的JVM实例的可用内存。然后基于这个值,您可以为未来的图像添加尺寸限制。

+0

这似乎是最干净的方法。我会和那个一起去的。 – Searles

1

使用try美中不足的是一个简单的方法来做到这一点

Example here

好运

+1

从['Error'文档](http://docs.oracle.com/javase/7/docs/api/java/lang/Error.html):*«Error'是'Throwable'的一个子类这表明严重的问题,合理的应用程序不应该试图赶上。* * – afsantos

0

尝试在运行应用程序时分配与内存一样多的内存。

-Xms256m -Xmx1024M 

上面的参数将分配1GB内存。

+0

我的问题与分配内存的数量无关。 – Searles

+0

我知道它没有关系,但这会帮助你避免这个错误。如果您在设置1GB后仍然出现错误,那么您的代码效率不高。 – Makky

+0

这个主题与效率无关,我只是想为一个简单的BufferedImage分配尽可能多的空间。 – Searles