Hace un momento lei un comentario en wired que menciona de manera concisa varios de los problemas del lenguaje Java. Lo copio como referencia.

 

Java certainly is progress relative to C and C++ in terms of memory safety. An attacker cannot easily inject code into a Java server program, as he can do with most C-style bugs. That’s very good.

Unfortunately, this comes packaged with mandatory automatic Garbage Collection, which increases memory demands by at least a factor of two. That translates in higher systems costs and shorter battery runtimes on a phone or a tablet. Worst of all, garbage collection will kick in at random points in time – when too much dead objects have accumulated. Chances are this happens when it is most inconvenient to the user. Certain applications such as control systems simply cannot tolerate random freezing of the controlling algorithm.

Finally, the lack of synchronous destructors and tightly packed data structures (e.g. Java forces «arrays of pointers» when an «array of values» would be perfectly fine) is a regression relative to C++ and even Fortran. And, you cannot allocate complex structures and arrays on the stack, which is a major performance feature of C++. For several reasons, stack allocation is the most efficient way of handling memory.