2012-03-29 39 views
0

所有,Android的RAM釋放/垃圾收集

我想釋放RAM在我的Android爲數據密集型操作,同時還能夠當用戶想要以釋放內存。我想要做的第一件事是運行system.gc()。但是,這不能保證垃圾收集器能夠正常工作。關於如何立即保證在代碼被調用時釋放內存的任何建議。另外,單擊小部件時釋放內存的應用程序如何完成此任務?

我想一個更好的辦法來語是這樣的:我怎麼手動釋放內存喜歡的是Android OS?

Thx

+0

如果沒有垃圾怎麼辦?您只能釋放未被引用的內存。這樣的保證是不存在的(而較弱的形式仍然是VM上的一個巨大限制,最終會降低效率)。 – delnan 2012-03-29 18:48:10

+0

vm在需要時釋放RAM。因此,對於所有意圖和目的,所有未分配給活動對象的內存始終可用。我非常懷疑你的操作或用戶會從完成這個任務中獲得任何明顯的好處(如果可能的話)。 – jpm 2012-03-29 18:51:02

+0

所以這是事情。我有一個應用程序,我打電話給system.gc(),試圖釋放內存。通常沒有任何反應,但是我點擊另一個可以釋放內存的應用程序的小部件,並且我看到免費內存增加100%,並且UI響應性增加。 – 2012-03-29 18:51:09

回答

3

您不必這樣做。如果您需要比目前更多的功能,Android會殺死更低優先級的應用程序以釋放內存。

+0

好吧,那麼如何讓所謂的免費內存應用程序做到這一點呢?免費ram有明顯的改變,並且UI響應度也有所提高。 – 2012-03-29 18:54:48

+0

他們只是殺死進程。但正如我所說的,您實際上不必手動執行此操作,因爲只要內存不多,Android就會爲您做到這一點。 – joni 2012-03-29 18:57:55

+0

當您操作的位圖不是這種情況。您將耗盡內存並強行關閉。但是,手動釋放內存可以在沒有任何問題的情況下運行。那麼更好的問題是如何手動釋放像操作系統一樣的內存。 Thx – 2012-03-29 19:00:08

1

我的理解是,Android上的理論是,運行的應用程序應該通過在具有較高優先級(即當前的前臺進程),另一個進程需要更多的內存回調機制放棄內存;此外,如果內存需求進一步增加,操作系統將開始查殺其他應用程序

因此,如果您希望您的應用程序能夠使用基本上所有系統的內存,您只需確保它保持在前臺或使用其他一些機制來確保其內存需求優先於其他內存內存需求(不幸的是,我不能說後半部分看起來像什麼)。

有沒有真正太多可以或應該做手工來釋放內存您的特定應用程序之外。操作系統正在做正確的事情:因爲需要內存,它會告訴應用程序「刪除所有非必要數據」,然後如果需要更多內存,它會告訴它們迷路。任何手動方法釋放內存基本上會做同樣的事情。

編輯:這聽起來像你想知道其他的「內存釋放」應用程序在做什麼。答案是,他們正在採取手動方法,並且執行與操作系統相同的操作 - 將信號發送到正在運行的進程。這是沒有必要的,因爲在你需要它之​​前,免費的內存實際上並沒有什麼好處。操作系統會在你需要額外的空間之前這樣做,這確保在絕對必要之前不會有進程被殺死。

0

Android有一個垃圾回收器。 iOS沒有。

+0

但iOS應用程序編譯器的實際版本有:https://developer.apple.com/technologies/ios5/(自動引用計數) – joni 2012-03-29 18:52:40

+0

如果您贊成,請留下評論。 – EGHDK 2012-04-06 17:41:18