Understanding and Tuning the Performance of Critical Sections with Program Analysis and Software Visualization Tools
Synchronization is difficult to do correctly within a multithreaded program, but less studied is how to track down performance related bugs that occur within an individual synchronized method's code. Thus, static, dynamic, and software visualization analysis tools focused on critical sections are needed to help uncover performance variability in critical sections. By removing variability, unintended bottlenecks in multithreaded programs can be potentially mitigated. In this defense we go over a static analysis, dynamic analysis, and two new visualization tools that analyze the properties of critical sections of Java code. Through our insights we find what mistakes real world programmers are making, and how we can debug and eliminate vexing performance bugs.