2013-03-29 32 views
0

我試圖理解爲什麼Android的GC的行爲方式是這樣,Android的GC行爲

  • VM堆設置爲512 MB
  • Runtime.getRuntime maxMemory爲512 MB
  • Runtime.getRuntime totalMemory是13 MB
  • Runtime.getRuntime freeMemory是3 MB

我總是在這些值的+/- 2-3 MB內。

我的代碼是功能性的,所以我用了很多對象,但我沒有在附近512 MB但我經常看到GC電話在我的logcat尤其是在緊密的循環。爲什麼它不會讓堆積累?和GC以小增量,而不是每隔300 ms就暫停我的應用程序。

有什麼辦法讓我對垃圾收集過程有更多的控制(這不會是一個市場應用程序,我沒有安裝自定義ROM的問題)除了股票答案正在改變你的編碼風格不創建大量的對象,因爲我看到一個真正的設備(四1,2 GHz的機器具有2 GB時,沒有其他應用程序正在運行,RAM的一個類似的水煤漿是一種惱人的有一臺機器這個強大的,而不是能夠代碼我喜歡的方式。)

回答

0

的主要問題是,一個應用程序在虛擬機上運行,​​每個虛擬機都有其極限。只要你不打算本地(NDK),你將不得不忍受與小RAM的VM獲得。

我沒有安裝自定義ROM的問題。

如果您想構建自己的ROM(或搜索具有可配置設置的ROM),請增加每個VM的大小並對其感到滿意。

我的代碼是功能性的,所以我用了很多對象

那麼有「使用了大量的對象」和「使用了大量的對象與該死的壽命短」之間的區別。但是當你不想聽到關於它...