确定Android GC何时运行

时间:2010-02-19 18:51:53

标签: android garbage-collection

有没有人知道GC运行时是否有办法识别(在代码中,而不是LogCat)?也许一个意图被解雇了?我可以分析LogCat输出,但如果我可以确定GC何时从我的代码中运行,那将是理想的。

2 个答案:

答案 0 :(得分:9)

你可以用弱参考技巧来做到这一点:

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,例如当它们进入后台时。

答案 1 :(得分:-3)

在所有线程都挂起之前,垃圾收集器不会运行。由于手机是相当低的内存环境,因此可以安全地假设在收到onPause()或onStop()后GC将运行。

我不认为GC会有一个钩子告诉你它在做什么。你可能不得不分配内存来告诉收集发生了。

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