[英]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.