2013-2-4 11:10:18



2013-2-4 11:10:18










ICS dalvik 在出现锁竞争后,有概率的记录锁日志,但记录的过程中发现java 栈已经被清空。




如果设置了lockProfThreshold 




那么就会计算每次等lock花了多少时间ts


取random 值,如果该值小于 ts/lockProfThreshold  ,且当前java栈还存在


那么就记录锁日志 


实际上这个log是记录在event log中的


dvm_lock_sample




01-29 06:27:00.020   399   697 I dvm_lock_sample: [system_server,0,Binder_9,9,ActivityManagerService.java,13450,BroadcastQueue.java,448,1]




进程名  hook的返回值


获取lock的时间长度  以ms为单位 


monitor 是在什么地方创建的


调用的地方


时间的百分比




为什么栈在这里会被清空?


看看其他线程正在做什么?


Userland stack for pid 14086


42对应的sourcecode  看看


Thread对象的join 方法 


调用的是vmthread 的wait方法 


VMThread 的create方法将2个不同的对象关联起来 


并且有了自己的java frame 


实际上在run 方法结束后


dvm在detachcurrentthread 中会唤醒所有在vmthread 上的等待


也就是所有有的join方法 


java 代码创建的线程在退出的时候 java 栈已经被清空了!!!

你可能感兴趣的:(2013-2-4 11:10:18)