我在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. 檢查我的程序使用了多少內存
- 2. MATLAB:如何查看.m文件中使用了多少內存?
- 3. linux - 如何檢查程序終止後使用了多少內存和時間?
- 4. java類在內存中佔用了多少時間
- 5. Redis:我如何檢查實時使用多少內存?
- 6. GroupBox中檢查了多少個CheckBox?
- 7. Hashtable使用多少內存?
- 8. as.data.table使用多少內存?
- 9. MemoryStream使用多少內存?
- 10. 如何檢查一週內註冊了多少用戶
- 11. 檢查包了多少次從CRAN
- 12. 檢查UPDATE進行了多少更改
- 13. 檢查已經過了多少天
- 14. Java的檢查,如果BufferedImage的是GIF
- 15. 在Java中使用BufferedImage
- 16. 我應該在我的Java程序中使用多少內存?
- 17. Malloc - >分配了多少內存?
- 18. NSMutableArray arrayWithCapacity - 分配了多少內存?
- 19. 檢查PHP數組佔用多少內存
- 20. iPhone:多少內存使用量太多?
- 21. 檢查在其他進程中可以讀取多少內存
- 22. 我的java程序最多使用多少內存?
- 23. 有多少人被Java子串內存問題困擾了?
- 24. 使用a4j:poll來檢查已經下載了多少個文件
- 25. 如何確定我的類使用了多少內存?
- 26. 找出線程使用了多少內存
- 27. 我可以瞭解一個Collection使用多少內存?
- 28. Linux如何知道進程使用了多少物理內存?
- 29. MemoryCache如何知道它使用了多少內存?
- 30. memcache可以告訴你它使用了多少內存?
使用'JVisualVM'在JDK(不是JRE)的'bin'文件夾,您的Java應用程序的進程連接到它。其配置文件部分可以提取應用程序中使用的所有類的內存使用情況。 –