Characterizing concurrency of java programs
University of New Brunswick
With the emergence of multi-core processors, concurrent programs are becoming the commonplace, as they can provide better responsiveness and higher performance. Java usually uses shared memory as the concurrent programming model. Moreover, Java provides various concurrency related features at the language level to support concurrent programming, such as thread creation and synchronization. However, because of the managed runtime environment of the Java Virtual Machine (JVM), it is hard to understand the performance of concurrent programs written in Java. Currently available metrics|the number of spawned threads, execution time and throughput|are not enough to characterize a Java program's concurrency behavior. More metrics are needed, such as how many threads contribute to the workload significantly and concurrently and how threads use shared memory. We present a set of metrics to characterize concurrency for Java programs. IBM's J9 JVM has been instrumented to trace concurrency behaviors, such as thread starts/ends and shared object access. Trace files are dumped when the VM shuts down. Post processing programs are used to process these trace files to generated these metrics. We also characterize concurrency for micro benchmarks with different concurrency patterns, as well as commercial and academic benchmarks. The results show that we can characterize concurrency for Java programs by using these metrics we presented.