簡體   English   中英

Java映像占用過多內存

[英]Java Images take up too much memory

我有一個使用很多圖像的程序。 它從文件中加載了大量圖像,並存儲它們,因此它們僅加載一次。 它還創建了多個BufferedImages,大約為400x400,其中不超過10個。

來自文件的圖像總計約6MB。 每個BufferedImage大約應為400x400x4 = 640KB。

但是,內存使用量為500MB!

其中一些將用於該程序的其余部分,但是我很確定圖像占據了大部分空間。

有誰知道該怎么辦? 還是使用更少內存的BufferedImage的替代方案?

在我看來,您的應用程序(而不是庫)存在內存泄漏。 在第一種情況下,您應該嘗試使用標准Java內存分析器識別泄漏。

編輯

現在,您已經確定有很多BufferedImages徘徊,接下來需要做的是弄清楚為什么仍然可以訪問它們。 進行堆轉儲,查看一些實例,看看它們如何連接到堆根。 參見http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/heapdump.html

在進行此類操作時,使用您喜歡的Java IDE查看Java源代碼的相關部分很有用。

您的程序是Web應用程序嗎? 或者您正在開發類似JRE的應用程序? 您如何加載圖像?

在基於Web的應用程序中,我將使用CSS-Sprite圖像來解決我的問題,因為它切斷了多個HTTP請求,並改善了帶寬使用率和負載時的內存使用率。

在JRE應用程序中,應該有一種以相同方式使用圖像精靈的方法,即加載圖像精靈的400x400偏移量以減少BufferedImage對象的使用並提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM