繁体   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