2013-02-07 135 views
0

是否顯式調用GC對系統內存有影響?在onPause()方法中調用GC是不是很好的做法?

我在我的活動中使用了一些數據結構,如ArraylistHashMap。每次用戶加載活動時,都需要從Web服務重新填充更新的數據。這意味着當用戶離開活動並再次返回時,這些數據結構應該進入內存。

當用戶離開活動並且不再來時,我不希望這些數據結構佔用任何內存。

那麼可以通過調用活動的onPause()中的GC來執行?這樣做是否是一種好的做法?如果我想做這樣的事情,有什麼選擇?

+0

不,這不是一個好習慣,你迫使虛擬機收集垃圾。讓vm做它的工作。 – NaviRamyle

回答

0

您應該先清除所有數據結構並將其設置爲空。 調用GC可能會降低設備性能及其對垃圾回收器的請求,但不確定是否會執行GC。

所以,而不是自己調用GC只是清除所有DS並將它們設置爲空。

+0

gc會如何降低設備性能。請您詳細說明一下? –

+0

請通過與http://stackoverflow.com/questions/2414105/why-is-it-a-bad-practice-to-call-system-gc – DcodeChef

1

首先,System.gc()只是一個請求。不能保證系統將運行垃圾收集器。

接下來,來找你的問題。如果您確定該活動將退出併爲數據更新重新創建,則最好將當前活動中的所有數據結構分配給NULL

這可以在onDestroy()方法中完成。這將確保所有DS對象都被釋放,並且系統在運行gc()時將考慮垃圾收集。

希望這會有所幫助。

+0

同意你的答案,但我想要的是內存佔用在我離開應用程序時應該回收它。在我的應用程序的某些其他部分實際上需要內存,但正如您所說,沒有系統會在我離開我的活動後立即收回它。簡而言之,我想打電話給垃圾收集器只需要一些活動。你有想法嗎? –

+0

另一件事是,如果你將空引用分配給任何佔用內存的東西,因爲null是空的引用。如果你正在運行64位的機器,它將佔用8字節的內存。所以對所有對象分配null是非常好的。 –

+0

系統在意識到內存正在運行**低**時運行垃圾收集器。因此,大多數時候,您不必擔心內存問題。您需要專注的一切就是在完成所有DS對象後發佈它們。 – SudoRahul

相關問題