2011-05-02 15 views
1

我有一個使用2400x1800緩衝圖像(我知道需要大量資源)的應用程序,但它的工作時間超過90%。需要130 MB的RAM並使用5%的CPU。Java應用程序佔用了10%的時間

問題是,有10%的時間,它有一個很大的滯後,只消耗40到50 MB RAM,並使用50%的CPU。爲什麼它沒有吃相同的記憶?

我知道我應該發佈一些代碼,但應用程序真的很大,鏈接到可能會談論這個特定問題的東西會有很大的幫助。

+1

運行探查器(甚至是採樣器)時,它表現不佳,並檢查它始終運行的代碼。這應該讓你開始。 – 2011-05-02 13:43:20

+0

您是否檢查過垃圾收集器是否在「壞」時運行這些時間?我敢打賭就是這樣。 – Borealid 2011-05-02 13:43:54

回答

0

或許運行JVM參數,如XMX(這是最大尺寸avaliable的應用程序中使用)和跨站腳本(這是該應用程序的起始內存)可以幫助你。

試試這個在Eclipse(假設你使用它)

RUN菜單,

然後運行配置...

然後選擇你的亞軍。

並單擊(x)=參數選項卡。

添加到您的VM參數

-Xmx512m -Xss150m

嘗試運行它......這會讓你的JVM開始至少已經分配給它的可用RAM 150MB ...

如果不使用eclipse,只需將這些參數添加到您的java命令行。

+0

我使用Netbeans,但非常有幫助的迴應。謝謝 – 2011-05-02 14:51:46

+0

希望它解決了它! – 2011-07-21 13:50:31

0

通過分析器運行它。 JProfiler是一個很好的使用。

0

您是否正在一次性加載圖片?爲什麼不將它平鋪並製作一些加載圖像的線程?如果你的程序中加載View的部分太大了,爲什麼不把它散佈在線程中呢?需要更多的建議?

好運

+0

不,謝謝你的幫助 – 2011-05-02 14:50:29

0

首先,130MB是很多,即使是2400x1800的圖像,這是不是意味着你消耗每像素27Byte。

對於每個像素(或4字節)圖像的經典32位,你會從你說的話只需要16-17MB

其次,它似乎是你消耗更多的內存,直到垃圾收集器被稱爲並且爲釋放內存做了很多工作。

您可能需要: - 增加可用的最大內存。 - 調整垃圾回收器來縮短暫停時間,但更頻繁。

編輯:也許你創造了很多這種大小的新形象,而不是更新它們,迫使大量的內存分配和內存的解除分配?

+0

應用程序是一個很大的,..感謝您的迴應 – 2011-05-02 14:44:48

0

這個問題幾乎沒有問題,但是應用程序中的週期性放緩通常是由於garbage collection。運行jvisualvm並查看與內存有關的圖表。如果您看到鋸齒圖案的峯值與性能下降的開始相吻合,則由於垃圾收集器處理大量對象,這會導致您的應用程序變慢。這可能會造成代碼中浪費的對象創建,或者您可能只需要爲虛擬機分配更多的內存。

這裏是一個指導

相關問題