uck*_*man 5 java heap bufferedimage
我正在尝试确定任何给定的 TYPE_INT_ARGBBufferedImage
将使用多少堆,以便对于进行一些图像处理的程序,我可以根据我们提供的图像大小设置合理的最大堆。
我编写了以下程序作为测试,然后我用它来确定它可以在没有 的情况下运行的最小最大堆OutOfMemoryError
:
import java.awt.image.BufferedImage;
public class Test {
public static void main(String[] args) {
final int w = Integer.parseInt(args[0]);
final int h = Integer.parseInt(args[1]);
final BufferedImage img =
new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
System.out.println((4*w*h) >> 20);
}
}
Run Code Online (Sandbox Code Playgroud)
(印刷值的预期大小int[]
,其中所述BufferedImage
的象素数据被存储。)我希望发现的是,所要求的最大堆是一样的东西x + c
,其中x
是所述数据阵列的大小和c
是由一个恒定加载的类的大小、BufferedImage
对象等。这是我发现的(所有值都以 MB 为单位):
4*w*h 最小最大堆 ----- ----- 5 - 10 15 20 31 40 61 80 121 160 241
1.5x
非常适合观察。(请注意,我没有发现 5MB 图像的最小值。)我不明白我看到了什么。这些额外的字节是什么?
归档时间: |
|
查看次数: |
2668 次 |
最近记录: |