专栏名称: 得物技术
技术知识分享交流平台,与你一同走向技术的云端。
目录
今天看啥  ›  专栏  ›  得物技术

二十万分之一几率:if语句变do-while卡死问题分析|得物技术

得物技术  · 公众号  ·  · 2024-12-09 18:30
    

主要观点总结

某应用经历灰度发布后出现线上ANR告警,排查后定位到页面onCreate方法执行过久,经火焰图及反编译发现本应是if语句的代码变成了do-while语句,导致主线程卡死。问题涉及自定义插桩工具weaver和R8编译工具。通过分析字节码和ASM方法复制原理,最终定位到多线程并发复制methodNode时导致的labelNode对象被替换的问题。通过增加类锁解决了问题。

关键观点总结

关键观点1: 背景介绍

应用经历灰度发布后线上出现ANR告警,定位到页面onCreate方法执行过久,经查火焰图和反编译发现代码逻辑异常。

关键观点2: 问题分析

初步分析是if和do-while语句互相转化的问题,涉及R8编译工具和自定义插桩工具weaver。通过对字节码和插桩原理的分析,定位到多线程并发复制methodNode导致的labelNode对象被替换的问题。

关键观点3: 解决方法

通过增加类锁解决多线程并发复制methodNode的问题,确保每个线程的复制操作互不干扰。

关键观点4: 总结

问题是由于字节码异常在多线程环境下引发的,对于涉及代码编辑操作的插件开发,需要特别关注并发场景下的稳定性。此类问题在业务规模扩大或环境变更时可能更容易出现。


免责声明

免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
推荐产品:   推荐产品
文章地址: 访问文章快照