Java as a language is great. It eliminates a lot of low level work for the programmer and provides a solid API for many functions. It is rather anal about forcing proper methodology for type conversions and variable initialization, unlike say PHP which doesn't seem to care. The downside to not having direct access to memory management or API's setting directly on top of hardware is speed. With the need to write clean multi-platform code that works, Java's sacrifice of software speed (especially with regards to modern hardware) was worth it. However, Java's virtual machines often do suck. Some are buggy and degrade Java software performance more than it should. VM's that take Java byte code and recompile it for native execution on the hardware platform are rare and don't do a good job of optimization (they're built to have fast re-compile times).