簡體   English   中英

確定Android GC何時運行

[英]Determine when the Android GC runs

有沒有人知道GC運行時是否有辦法識別(在代碼中,而不是LogCat)? 也許一個意圖被解雇了? 我可以分析LogCat輸出,但如果我可以確定GC何時從我的代碼中運行,那將是理想的。

你可以用一個弱參考技巧來做到這一點:

WeakReference<GcWatcher> mGcWatcher
        = new WeakReference<GcWatcher>(new GcWatcher());
long mLastGcTime;

class GcWatcher {
    @Override
    protected void finalize() throws Throwable {
        handleGc();
        mLastGcTime = SystemClock.uptimeMillis();
        mGcWatcher = new WeakReference<GcWatcher>(new GcWatcher());
    }
}

現在......對於應用程序來說,這是否真的正確,是另一回事。 :)我知道在Android中我們所做的任何地方的唯一地方就是這里的代碼,它的唯一目的是幫助我們明智地詢問流程何時明確GC,例如當他們進入后台時。

在所有線程都掛起之前,垃圾收集器不會運行。 由於手機是相當低的內存環境,因此可以安全地假設在收到onPause()或onStop()后GC將運行。

我不認為GC會有一個鈎子來告訴你它在做什么。 你可能不得不分配內存來告訴收集發生了。

我很好奇,如果你的程序有這些信息,它會用它做什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM