Issue No.11 - November (2011 vol.60)
J. Morris Chang , Iowa State University, Ames
Kuo-Yi Chen , National Cheng Kung University, Tainan
DOI Bookmark: http://doi.ieeecomputersociety.org/10.1109/TC.2010.232
The performance and scalability issues of multithreaded Java programs on multicore systems are studied in this paper. First, we examine the performance scaling of benchmarks with various numbers of processor cores and application threads. Second, by correlating low-level hardware performance data to JVM threads and system components, the detail analyses of performance and scalability are presented, such as the hardware stall events and memory system latencies. Third, the usages of memory resource are detailed to observe the potential bottlenecks. Finally, the JVM tuning techniques are proposed to alleviate the bottlenecks, and improve the performance and scalability. Several key findings are revealed through this study. First, the lock contentions usually lead to a strong limitation of scalability. Second, in terms of memory access latencies, the most of memory stalls are produced by L2 cache misses and cache-to-cache transfers. Finally, the overhead of minor garbage collections could be an important factor of throughput reductions. Based on these findings, the appropriate Java Virtual Machine (JVM) tuning techniques are examined in this study. We observe that the use of a parallel garbage collector and an appropriate ratio of young to old generation can alleviate the overhead of minor collection and improve the efficiency of garbage collections. Moreover, the cache utilizations could be enhanced with the use of thread-local allocation buffer, and then leads to the performance improvements significantly.
Garbage collection, Java, lock contention, multicore, performance counter, scalability, virtual machine.
J. Morris Chang, Kuo-Yi Chen, "Multithreading in Java: Performance and Scalability on Multicore Systems", IEEE Transactions on Computers, vol.60, no. 11, pp. 1521-1534, November 2011, doi:10.1109/TC.2010.232