Removing Unnecessary Synchronization in Java
Jeff Bogda and Urs Hölzle
Abstract: Java programs perform many synchronization operations on data structures. Some of these synchronizations are unnecessary; in particular, if an object is reachable only by a single thread, concurrent access is impossible and no synchronization is needed. We describe an interprocedural, flow- and context-insensitive data-flow analysis that finds such situations. A global optimizing transformation then eliminates synchronizations on these objects. For every program in our suite of ten Java benchmarks consisting of SPECjvm98 and others, our system optimizes over 90% of the alias sets containing at least one synchronized object. As a result, the dynamic frequency of synchronizations is reduced by up to 99%. For two benchmarks that perform synchronizations very frequently, this optimization leads to speedups of 36% and 20%.
Keywords: synchronization, compiler optimization, Java, SPECjvm98
To appear at OOPSLA '99, Denver, CO, November 1999
To get the PostScript file of the OOPSLA paper, click
here
(PDF is here).
Technical Report TRCS99-10, Computer Science Department, University
of California, Santa Barbara, April 1999
To get the PostScript file of the technical report, click
here
(PDF is here).