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