Java is worse when it comes to efficiency than most languages well, the other most prominent ones, anyways. Maybe it has a leg up on Python, it lacks the user-friendly nature of Python, as well as being beaten in terms of efficiency by C++ and the like. The only thing Java has going for it is how ubiquitous its virtual machine is at this point, and the fact that for god knows what reason it's commonly taught to students.
I love the vitriol Java hate... no, it's sad really. I'm not a Java programmer, but I respect what it's accomplished under the proper hands. Sure, there's people who completely fail at being able to write cross platform solutions, but it's far... far easier to come up with a solution in Java that performs "well enough" to accomplish the task which it was designed for and not so complicated that it requires someone with an inherent working knowledge of pointer operations to debug, patch, and maintain. I would say the same for Actionscript and Javascript. While I myself would like to see a purely functional language pick up steam, people are still obsessed with this notion that the code has to be fine tuned for a specific machine and instruction set and we will likely never step beyond that ignorance in the near future.
Really, Java is just an iteration in abstraction and while it's not going to beat a compiled language in speed AND memory footprint, neither will C/C++ beat pure Assembler code. It's taught in colleges because it's perfectly capable of teaching students how to code in OO without having to bore them to death over mundane boilerplate code for construction/destruction and memory operations inherent to compiled code and it, quite frankly, existed far before it's time. Only recently has someone created a viable alternative to it's level of abstraction and that has an ominous cloud floating over it called Microsoft.
I'm not arguing this topic here, but that's my take on it.