我在Java中有一个bufferedImage。我如何看到它占用了多少内存? 在此先感谢。检查java中使用了多少内存bufferedImage?
回答
您可以确定有多少字节的图像数据单独使用这种占用:
DataBuffer buff = image.getRaster().getDataBuffer();
int bytes = buff.getSize() * DataBuffer.getDataTypeSize(buff.getDataType())/8;
图像本身占用了更多的空间用于颜色模型和其他簿记信息,但对于大的图像,bytes
将成为主导词。
+1绝对是一个聪明的做法。 BufferedImage中的额外开销相对较小,特别是因为现在大多数图像不使用索引颜色模型(这是图像中唯一的其他潜在的大数据块,在极少数情况下可能高达256k)。 – mikera
为什么你在最后除以8。 getDataType()返回大小的位数? – klyngbaek
@thehanseatic - 的确如此。从文档为[DataBuffer中](http://docs.oracle.com/javase/6/docs/api/java/awt/image/DataBuffer.html):_“返回数据类型的大小(位) ,给定一个数据类型标签。“_ –
我不知道有100%的准确率下降到字节数算出这个一个直接的方式,没有自己计算它(考虑到颜色模式,图像尺寸,以及其他因素)。
在分配之前和之后的堆You can calculate the totalMemory() and freeMemory(),并得到一个估算的方式。如果其他对象在您的支票之间分配(或收集),您的计算将不准确。
This discussion讨论了JVM中原始类型的大小(一个对象是许多原始对象的集合),您可以使用它来计算出这些。
This article给Java中的内存使用情况的概述。
使用Runtime#totalMemory
和Runtime#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
可确保没有收集到的对象正在增加内存使用量。
- 1. java类在内存中占用了多少时间
- 2. GroupBox中检查了多少个CheckBox?
- 3. Hashtable使用多少内存?
- 4. as.data.table使用多少内存?
- 5. 检查包了多少次从CRAN
- 6. Java的检查,如果BufferedImage的是GIF
- 7. 我应该在我的Java程序中使用多少内存?
- 8. NSMutableArray arrayWithCapacity - 分配了多少内存?
- 9. Malloc - >分配了多少内存?
- 10. 检查在其他进程中可以读取多少内存
- 11. iPhone:多少内存使用量太多?
- 12. 有多少人被Java子串内存问题困扰了?
- 13. 我可以了解一个Collection使用多少内存?
- 14. Linux如何知道进程使用了多少物理内存?
- 15. memcache可以告诉你它使用了多少内存?
- 16. 如何查找使用Java留下了多少磁盘空间?
- 17. 如何检查java程序使用多少资源?
- 18. C++指针使用多少内存?
- 19. PHP实际使用多少内存?
- 20. SQL Server实际使用多少内存?
- 21. 多少内存的NSNotificationCenter使用
- 22. 哈希表使用多少内存?
- 23. numpy ndarray使用多少内存?
- 24. 如何在Java中检查CPU和内存使用情况?
- 25. 使用了多少位?
- 26. 有没有办法查看变量使用多少内存?
- 27. 在初始化Object数组时,Java中分配了多少内存?
- 28. ProtoBuf中“丢失可选”/“空白重复”字段使用了多少内存?
- 29. 如何知道我在一个进程中使用了多少内存? win32 C++
- 30. 如何计算在asp.net中检查了多少个复选框?
使用'JVisualVM'在JDK(不是JRE)的'bin'文件夹,您的Java应用程序的进程连接到它。其配置文件部分可以提取应用程序中使用的所有类的内存使用情况。 –