We present an on-the-fly mechanism that detects access conflicts in executi
ons of multi-threaded Java programs. Access conflicts are a conservative ap
proximation of data races. The checker tracks access information at the lev
el of objects (object races) rather than at the level of individual variabl
es. This viewpoint allows the checker to exploit specific properties of obj
ect-oriented programs for optimization by restricting dynamic checks to tho
se objects that axe identified by escape analysis as potentially shared. Th
e checker has been implemented in collaboration with an ''ahead-of-time'' J
ava compiler.
The combination of static program analysis (escape-analysis) and inline ins
trumentation during code generation allows us to reduce the runtime overhea
d of detecting access conflicts. This overhead amounts to about 16-129% in
time and less than 25% in space for typical benchmark applications and comp
ares favorably to previously published on-the-fly mechanisms that incurred
an overhead of about a factor of 2-80 in time and up to a factor of 2 in sp
ace.