I agree it's mushy territory, and will become more so with Perl 6 and its distinction between compiler and VM. But the difference between the languages is not just that Java keeps the two steps entirely separate, but also that the Java language is designed to achieve dynamic runtime behavior not through reliance upon a ready-to-hand compiler but on mechanisms like typecasting and classloading.
One might view Java (and Perl 6 when people start releasing bytecode versions of their software (and you know they will :) ) as residing in an intermediate category between C et al and Perl 5 et al. That's the argument made in this article.
"The dead do not recognize context" -- Kai, Lexx