看ART代码过程中,看到LogContentionEvent函数,记起logcat events中有大量的dvm_lock_sample信息。
dvm_lock_sample: [com.banyac.midrive.map,1,main,98,ReportUtil.java,119,-,189,19]
进程名,主线程?线程名,锁等待时间,下个持有者文件名,行号,上个持有者文件名,行号,等待百分比
- 打印此LOG时,线程即将持有锁。
- 上一个持有者文件名为“-”时,表示与下个持有者在同一个文件中
- 发生锁等待时这个LOG有概率打印,等待百分比越大,概率越大。具体请看代码。
art/runtime/monitor.cc
void Monitor::Lock(Thread* self) {
MutexLock mu(self, monitor_lock_);
while (true) {
if (owner_ == nullptr) { // Unowned.
owner_ =