2013-12-20 127 views
0

我在做一些應用程序(服務器和客戶端)。我有一個觀點,我需要調用System.gc();Java和調用垃圾收集

但是我發現這裏Why is it bad practice to call System.gc()?不推薦打電話GC。

如果我使用System.gc()的程序運行在80MB〜內存,但沒有GC,內存長大到約600-700MB,我需要在Android手機上運行它

是否有其他方法清除記憶?

感謝

編輯:看評論,在Android作爲我已經測試(移植1小時前),用System.gc()的運行良好,我還沒有測試它

EDIT 2 :這裏有兩張照片,5分鐘後在桌面上運行的程序:

隨着System.gc()的:http://imgur.com/M9yMBei 沒有的System.gc():http://i.imgur.com/4qb2Ylc.png

編輯3:WOW! 1之前發佈這個應用程序是使用約2GB的RAM!

+1

600 MB的堆? – Blackbelt

+0

GC將回收的對象* *時,它可以(和* *時,它認爲它需要) - 用於如Android系統的關鍵是要設計這樣可以一次裝載不沒有那麼多需求的應用程序。這就是爲什麼視圖在Android中具有自包含的生命週期等等:設計是爲了限制工作足跡。 – user2864740

+0

澄清:無需調用'System.gc()',當在移動設備上運行時,內存增長至600,700 MB * *?或者,您是否正在桌面機上使用桌面JRE進行這些測試? – delnan

回答

2

這是不好的做法,因爲正常運行時更瞭解比你的系統的狀態。如果RAM可用,爲什麼不使用它?如果RAM不可用,則無論如何系統都會提前GC。

在任何情況下,撥打System.gc()僅僅是一個提示,我懷疑隨着時間流逝只會更容易被忽略的提示。