首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

AssetManager.finalize() Timed Out After 10 Seconds分析

遇到这种情况,我们就需要从崩溃后台手机上的信息去分析产生的原因了 原理分析 Android在启动后会创建一些守护进程,其中涉及到该问题的有两个,分别是FinalizerDaemon和FinalizerWatchdogDaemon...FinalizerDaemon 析构守护线程。...对于重写了成员函数finalize的对象,它们被GC决定回收时,并没有马上被回收,而是被放入到一个队列中,等待FinalizerDaemon守护线程去调用它们的成员函数finalize,然后再被回收。...用来监控FinalizerDaemon线程的执行。一旦检测那些重写了finalize的对象在执行成员函数finalize时超出一定时间,那么就会退出VM。...如果是FinalizerDaemon进行对象析构时间超过了MAX_FINALIZE_NANOS(这里是10s),FinalizerWatchdogDaemon进行就会抛出TimeoutException

1.5K10

finalize() timed out after 10 seconds的解决方案

查阅了网上的资料才发现,通常这个错误发生在 java.lang.Daemons$FinalizerDaemon.doFinalize的方法中,直接原因是对象的 finalize() 方法执行超时。...FinalizerDaemon 析构守护线程 对于重写了成员函数finalize()的类,在对象创建时会新建一个 FinalizerReference 对象,这个对象封装了原对象。...FinalizerDaemon 线程循环取出链表里面的对象,执行它们的 finalize() 方法,并且清除和对应 FinalizerReference对象引用关系,对应的 FinalizerReference...FinalizerWatchdogDaemon 析构监护守护线程 析构监护守护线程用来监控 FinalizerDaemon 线程的执行,采用 Watchdog 计时器机制。...当 FinalizerDaemon 线程开始执行对象的 finalize() 方法时,FinalizerWatchdogDaemon 线程会启动一个计时器,当计时器时间到了之后,检测 FinalizerDaemon

3.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JVM 系列(5)吊打面试官:说一下 Java 的四种引用类型

    其实,在虚拟机启动时,会启动一系列守护线程,其中就包括处理引用入队的 ReferenceQueueDaemon 线程和 Finalizer 机制的 FinalizerDaemon 线程,这里唤醒的正是ReferenceQueueDaemon...// 启动四个守护线程: // ReferenceQueueDaemon:处理引用入队 ReferenceQueueDaemon.INSTANCE.start(); // FinalizerDaemon...:处理 Finalizer 机制 FinalizerDaemon.INSTANCE.start(); FinalizerWatchdogDaemon.INSTANCE.start();...随后,守护线程 FinalizerDaemon 会轮询观察引用队列,并执行实际对象上的 finalize() 方法。 更多内容分析,见 Finalizer 机制 ---- 4....引用对象会暂存到全局临时队列 unenqueued 队列; 2、守护线程 ReferenceQueueDaemon 会轮询 unenqueued 队列,将引用对象分别投递到关联的引用队列中; 3、守护线程 FinalizerDaemon

    56410

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券