现在有一些分析器承诺分析程序执行的并发行为以了解线程执行。
我是一个集合特性,这对于只专注于分析并发性的 Java 分析器很有用:
到目前为止我收集的内容:
构建等待图以检测潜在的死锁
访问资源(数据结构等)的时间测量
显示每个线程的状态(活动、中断、死亡)
哪个线程调用哪个线程来访问共享资源(等待、阻塞等)
你有什么想法?就我个人而言,我的目标是在处理 Java 并发时揭示一些不良的编程习惯。
现在有一些分析器承诺分析程序执行的并发行为以了解线程执行。
我是一个集合特性,这对于只专注于分析并发性的 Java 分析器很有用:
到目前为止我收集的内容:
构建等待图以检测潜在的死锁
访问资源(数据结构等)的时间测量
显示每个线程的状态(活动、中断、死亡)
哪个线程调用哪个线程来访问共享资源(等待、阻塞等)
你有什么想法?就我个人而言,我的目标是在处理 Java 并发时揭示一些不良的编程习惯。
每个线程的汇总统计信息:每个状态(运行、可运行、阻塞等)花费了多少时间。
任何
一个很棒的方法是查看不受happens-before保护的共享数据,因此是活泼的。不过很难做到。
当每个线程被阻塞时,如果线程代码很复杂,仅仅知道它被阻塞不会提供太多信息,即使你可以知道它在等待哪个其他线程。我想知道为什么它被阻止了。
判断它为什么被阻塞的方法是在它被阻塞时捕获它的调用堆栈。堆栈上的每个函数调用站点都给出了它为什么存在的推理链中的一个链接。
用于检测“热”监视器以查找争用位置的工具。例如,显示按等待它们的总时间排序的锁,能够查看持有锁的代码位和等待它的代码位。