P3 is a novel profiling suite for parallel applications running on the JVM.
P3 focuses on metrics related to parallelism, concurrency, and synchronization. Specifically, P3 profiles the use of concurrent entities, constructs and classes to implement synchronization, lock-free operations, as well as synchronized and concurrent collections. Our tool enables the collection of metrics that, to the best of our knowledge, are not targeted by other profilers, such as the use of volatile memory accesses, futures and promises, synchronizers, synchronized collections, and concurrent collections. P3 can be run on any standard JVM that supports the JVM Tool Interface (JVMTI). P3 is composed of several profiling modules that can be enabled individually, each incurring only moderate profiling overhead. In addition, P3 can be immediately applied to popular benchmark suites for the JVM (e.g., Renaissance, DaCapo, ScalaBench, SPECjvm2008) and can be readily used to conduct large-scale analyses on public software repositories via NAB. P3 resorts to efficient lock-free data structures, a careful architectural design that minimizes computations done in the inserted instrumentation code, and the use of advanced technologies such as reification of reflective information in a separate instrumentation process.
An evaluation version of P3 can be downloaded here.
The archive contains a virtual machine where P3 has been already set up and is ready to use. Additionally, the virtual machine includes sample workloads that are ready to be profiled with P3.
 Andrea Rosà, Walter Binder: P3: A Profiler Suite for Parallel Applications on the Java Virtual Machine. APLAS 2020: 364-372 [pdf][video (APLAS’20)][slides (APLAS’20)][slides (SPLASH’22)]