Static Analyses for Eliminating Unnecessary Synchronization from Java Programs
Jonathan Aldrich, Craig Chambers, Emin Gun Sirer, and
This paper presents and evaluates a set of analyses designed to
reduce synchronization overhead in Java programs. Monitor-based synchronization
in Java often causes significant overhead, accounting for 5-10% of total
execution time in our benchmark applications. To reduce this overhead,
programmers often try to eliminate unnecessary lock operations by hand.
Such manual optimizations are tedious, error-prone, and often result in
poorly structured and less reusable programs. Our approach replaces
manual optimizations with static analyses that automatically find and remove
unnecessary synchronization from Java programs. These analyses optimize
cases where a monitor is entered multiple times by a single thread, where
one monitor is nested within another, and where a monitor is accessible
by only one thread. A partial implementation of our analyses eliminates
up to 70% of synchronization overhead and improves running time by up to
5% for several already hand-optimized benchmarks. Thus, our automated
analyses have the potential to significantly improve the performance of
Java applications while enabling programmers to design simpler and more
reusable multithreaded code.
Published in the proceedings of the Sixth International Static Analysis
Symposium, Venezia, Italy, September 1999. © 1999 Springer-Verlag.
Available in PDF
and gzipped Postcript