专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
郭霖  ·  Android Resource资源管理 ·  2 天前  
今天看啥  ›  专栏  ›  鸿洋

Android主线程锁监控的一种方案

鸿洋  · 公众号  · android  · 2024-09-14 08:35
    

主要观点总结

本文主要介绍了如何检测和解决主线程等待锁的问题,包括技术基础、实现思路、具体实现和问题解决等关键点。

关键观点总结

关键观点1: 技术基础

介绍了如何通过Java线程状态检测主线程是否等待锁,以及相关技术知识点,如线程状态和Monitor的获取。

关键观点2: 实现思路

描述了基于技术基础,如何大致监控主线程锁等待的方法,包括轮询主线程状态和通过jni函数调用获取被等待的线程的id。

关键观点3: 具体实现和问题

详细阐述了实现过程中需要处理的问题,如如何调用jni函数、获取函数签名、对齐线程id等,并介绍了如何通过反射获取Thread指针。

关键观点4: 总结

总结了整个方案的实现过程,并推荐了相关的网站资源。同时提到了文章推荐阅读和其他相关内容。


文章预览

去年处理一些性能问题的时候,遇到过一些主线程等待锁的问题,如果主线程等待锁的时间太长,就会出现主线程卡顿甚至ANR。所以我们需要通过技术手段去检测可能存在的锁等待。 1 技术基础 如何检测主线程等待锁?这里涉及一些技术基础知识点: 线程状态 Java线程可以通过 getState 获取线程的状态,线程状态包括 NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITTING、TERMINATED 几个状态,其中 BLOCKED 就是等待锁的时候进入的阻塞状态。 获取线程想要竞争的Monitor 在art源码的 monitor.cc 里面通过 GetContendedMonitor 函数可以获取某个 Thread 在等待的 Monitor: 获取Monitor被持有的线程 也是在 monitor.cc 里面可以通过 GetLockOwnerThreadId 获取 monitor 被持有的线程: 2 实现思路 有了上述技术基础,我们就可以出现一个大致的主线程锁等待的监控。我们可以按一定频次轮训主 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览