gpt4 book ai didi

java - 我的 Java 程序应该使用多少内存?

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:17 24 4
gpt4 key购买 nike

我正在制作一个 Java 程序。它涉及制作尺寸高达 9933 * 14043 像素(A0 尺寸和 300 ppi)的图像。图片是 24 位的,所以它会占用大约 400mb 的空间。 BufferedImage 类占用的 RAM 多于位图的实际大小,因此图像将占用大约 600 MB 的 RAM。对于其他数据,应用程序在渲染大图像时最多需要大约 700 MB 的内存。到目前为止我还没有遇到任何问题。但是,如果最终用户没有足够的可用内存,JVM 将无法为位图分配内存,并会抛出 OutOfMemoryError。

那我该怎么办呢?

我想到了一些东西:

  1. 捕获错误并向用户抛出提示。
  2. 请稍等片刻,直到这里有足够的内存。如果等待时间过长,则抛出提示。
  3. 编写我自己的位图类,并使用 FileOutputStream 逐部分写入图像。 .bmp 格式并不复杂。 (实际上我已经编写并优化了其中的大部分内容。)通过按部分渲染位图,整个图像不必留在 RAM 中。部件的大小可以根据可用内存大小动态更改。然而,这是一种重新发明轮子,需要大量的工作。此外,图像中涉及文本的部分必须放入 BufferedImage 中,然后转换为我的类(因为我不想查看真正的字体格式)。无论如何,如果 Java BufferedImage 类适用于我的情况,我就不会这样做。

最佳答案

我怀疑现在没有人拥有不到一 block ram。因此,您可以使用 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 将尝试使用的最大内存量(以字节为单位)。

关于java - 我的 Java 程序应该使用多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com