android FinalizerWatchdogDaemon 崩溃问题

第一次遇到这样的问题,网上脑补了一下。

这个现象是Java虚拟机的BUG,比较好的解释是,当开始GC的时候,强制让机器休眠,然后等超过2秒后唤醒机器,就有可能导致这个现象。原因在于虚拟机认为自己回收超时了。其实这2S时间CPU根本没有工作。
具体的解法应该是修改虚拟机获取时间的函数,调整为采用CPU上电工作时间,应该就不会发生问题了。

代码修复:

public static void fix() {
    try {
        Class clazz = Class.forName("java.lang.Daemons$FinalizerWatchdogDaemon");

        Method method = clazz.getSuperclass().getDeclaredMethod("stop");
        method.setAccessible(true);

        Field field = clazz.getDeclaredField("INSTANCE");
        field.setAccessible(true);

        method.invoke(field.get(null));

    }
    catch (Throwable e) {
        e.printStackTrace();
    }
}

来源:

https://blog.csdn.net/yangyulong0622/article/details/125546628

https://stackoverflow.com/questions/35311425/thousands-of-java-util-concurrent-timeoutexception-android-os-binderproxy-final

https://www.mobibrw.com/2016/3069

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注