I am searching for a tool to allow me to test a Java application and find deadlocks and races in it.
I understand there are two main approaches, static or dynamic. That is, static code analysis, or instrumented execution.
I am interested in instrumented execution, because static analysis has unacceptable false positive rate for my purpose, whereas instrumented execution has essentially zero false positives. I am already using static analyzer (Coverity Scan for Open Source) and I just don't have the time (and expertise) to go through potential issues it reports and triage them.
There too seem to be two approaches to instrumented execution. Either I the programmer am given power to influence thread scheduling, with something like Thread Weaver, or the tool is automatically trying various promising thread schedules, like CalFuzzer.
CalFuzzer seems pretty much dead, it took me half a day to just make it run the example tests attached to the project on Java 8 and I worry what obstacles will come next...
Do you know of any such automated tools like CalFuzzer that are free to use, work for Java programs, and have a healthy and active community around them?