Java forces you to always be safe at the real cost of performance. These decisions should be left to the programmer not to the language designers. Each application has its own set of requirements. Some applications, such as real-time systems, have performance as its highest priority. It is more important that a missle guidance system calculate the proper trajectory before it crashes into the side of a mountain.
Late data is just as bad as inacurrate data.
The programmer needs to have the ability to decide what is more important and code to those requirements. It can be used as a better C, which means that it can be used as a traditional procedural language or it can be used as an object oriented language or even a mixture of both. Java forces you to write in an object oriented style even when it is not appropriate to the problem at hand. The most important issue to me is whether Java is truly a cross-platform language. From my experience and what I have read about the language it has failed in this crucial regard.