Java issues:
1. Performance: Java memory management seems to be more automated, but in fact, performance is not particularly good. Especially when new objects are not controlled. In Java, some object construction costs are low and some are high. Especially when it comes to UI programming, most UI objects are expensive to build. If in the development process without saving consciousness, will certainly lead to the JVM constantly GC, system performance is very card appearance, of course, completely when it may not, but basically work is very slow.
2; Reference: In Java, in fact, in a large number of use of object references, object references can reduce memory consumption, not to build unnecessary objects. But in fact, most programmers do not understand the reference very well, resulting in excessive unnecessary construction of objects, memory consumption. The code is also poorly readable, especially when written.
3; object-oriented: Java is an object-oriented language, but it has an underlying type that is not object-oriented and cannot be passed as a reference. In general, these underlying types can be used to represent the state of an object. The object in Java must contain state, the object without state is actually nonexistent, the thing with no state is not an object, but a collection of behaviors. But there is no explicit structure in Java to express the situation, so only one class can be written to represent it, and the construction of the class is defined as private to prevent others from being built. This time the function of the class is equivalent to the namespace. Java in object-oriented support is actually very incomplete, lack of many necessary support, such as virtual function, multiple inheritance, friend. This deformity, resulting in design difficulties, so the Java system is very wordy.
4: Complex: Java is getting more and more complicated. Annotations, generics, enumerations, many attributes.
5: Immutable: Java support is immutable, but most people don't understand this topic. Immutable systems are easier to implement and are not prone to error. But Java is a reference-based system, and immutable can cause a lot of memory problems. The JVM lacks tail-recursive optimization, which is actually a problem.
Transferred from: http://my.oschina.net/clarkhill/blog/59546
The problem with Java (GO)