Static parallelization of general-purpose programs is still impossible, in
general, due to their common use of pointers, irregular data structures, an
d complex control-flows. One promising strategy is to exploit pa;allelism a
t runtime. Runtime parallelization schemes, particularly data speculations,
alleviate the need to statically prove independent computations at compile
-time. However, studies show that many real-world applications exhibit limi
ted speculative parallelism to offset the overhead and penalty of speculati
on schemes. This paper addresses this issue by using compiler analyses to c
ompensate for speculative parallelizations. We focus on general-purpose Jav
a programs with extensive use of Java container classes. In our scheme, com
pilers serve as a guideline of where to speculate by "lazily" detecting dep
endences that are mostly static, while leaving those that are more dynamic
to runtime. We also propose techniques to enhance speculative parallelism i
n the programs. The experimental results show that, after eliminating stati
c dependences, the four applications we study exhibit significant paralleli
sm that can be gainfully exploited by a speculative parallelization system.