有没有人知道GC运行时是否有办法识别(在代码中,而不是LogCat)?也许一个意图被解雇了?我可以分析LogCat输出,但如果我可以确定GC何时从我的代码中运行,那将是理想的。
答案 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会有一个钩子告诉你它在做什么。你可能不得不分配内存来告诉收集发生了。
我很好奇,如果你的程序有这些信息,它会用它做什么?