我在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應用程序的進程連接到它。其配置文件部分可以提取應用程序中使用的所有類的內存使用情況。 –