我正在制作一个Java程序。 它涉及制作尺寸高达9933 * 14043像素(A0尺寸和300 ppi)的图像。图像为24位,因此占用大约400mb的空间。 BufferedImage类有些如何占用比位图实际大小更多的RAM,因此图像将占用大约600 MB的RAM。 使用其他数据时,应用程序在渲染大图像时最多会占用大约700 mb的RAM。到目前为止我没有任何问题。但是,如果最终用户没有足够的可用内存,则JVM将无法为位图分配内存并将抛出OutOfMemoryError。
那我该怎么办?
我想出了一些东西:
答案 0 :(得分:3)
我怀疑现在任何人都不到一场公羊。因此,您可以检查用户是否有足够的内存Runtime.getRuntime().maxMemory()
,以及他们是否只显示错误并关闭。以下是在出现错误时使用JOptionPane
的示例:
long memory = Runtime.getRuntime().maxMemory(); //in bytes
long required = 700 * 1024 * 1024; //700MB, in bytes
if(memory < required) {
JOptionPane.showMessageDialog(null, "You don't have enough memory. (700MB required)", "Error", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
maxMemory()
返回JVM尝试使用的最大内存量(以字节为单位)。