检查java中使用的bufferedImage内存量是多少?

时间:2011-12-02 02:41:29

标签: java memory-management bufferedimage

我在Java中有一个bufferedImage。我怎么看它占用了多少内存? 提前谢谢。

3 个答案:

答案 0 :(得分:13)

您可以使用此确定图像数据单独占用的字节数:

DataBuffer buff = image.getRaster().getDataBuffer();
int bytes = buff.getSize() * DataBuffer.getDataTypeSize(buff.getDataType()) / 8;

图像本身为颜色模型和其他簿记信息占用了更多空间,但对于大图像,bytes将成为主导词。

答案 1 :(得分:0)

我不确定有没有一种直接的方法来解决这个问题,只需要100%的准确度到字节数,而不用自己计算(考虑到颜色模型,图像大小和其他因素) )。

在分配之前和之后的堆上

You can calculate the totalMemory() and freeMemory(),并以此方式获得估计。如果在您的支票之间分配(或收集)其他对象,则您的计算将不准确。

This discussion讨论了JVM中原始类型的大小(一个对象是许多原始对象的集合),您可以用它来解决这个问题。

This article概述了Java中的内存使用情况。

答案 2 :(得分:0)

使用Runtime#totalMemoryRuntime#gc应该能够得到非常接近的近似值。例如:

Runtime.getRuntime().gc();Runtime.getRuntime().gc();Runtime.getRuntime().gc();
long totalUsed = Runtime.getRuntime().totalMemory();

BufferedImage image = ...

Runtime.getRuntime().gc();Runtime.getRuntime().gc();Runtime.getRuntime().gc();
totalUsed = Runtime.getRuntime().totalMemory() - total;

多次调用gc会增加垃圾收集器实际运行的可能性,因为gc只是一个建议。在此示例中调用gc可确保没有收集的对象正在添加内存使用情况。