Essentially, it hasn't evolved the way it probably should have. I am no fan of Microsoft, but, if you're going to have a general-purpose class-based static language using C-like syntax, C# is now as far ahead of Java as mutants are ahead of humans.
Also, there's a stigma attached to Java: code is over-architected, slow and eats memory like crazy. My experience certainly leads me to believe that this is true, though it seems to say a lot more about Java developers than Java itself.
1. Division of primitive datatypes and objects is ungodly annoying.
2. System.arraycopy(), where is the camelCase Java standards fascists?
3. .length vs .size() really, why does a primitive have an attribute anyways?
4. Date, Time, Calendar are a colossal cluster-f* unless your favorite word is Deprecated.
5. System.out.println, this is one of the most common output and debugging methods, why is it 18 characters? NO, static imports don't mitigate the idiocy.
6. HashMap<String,String> map = new HashMap<String,String>(), seem repetitive to anyone?
7. No unsigned data types?
8. Everything has to be a class.
9. Anonymous inner classes are no alternative to lambdas.
10. Generics are broken and Type Erasure for backwards compatibility is simply ridiculous.
11. No operator overloading?
Besides all these petty annoyances Java isn't fun to code, period. If you think it is you should have a go with Python or better yet Ruby.
IMHO Java suffers from two fundamental impairments:
1. It is too easy.
2. It is an enterprise programming language.
Because it is so easy the community is inundated with nonsense. Because it is burdened by the expectation of massive enterprises it can never change and therefore it can never improve.It has a huge amount of capability and speed, and it forces you into a very structured programming model that works well for large projects. The same applies to eclipse.
But for small projects it really is a ten ton hammer. The overhead of setting up full class hierarchies, GUIs, etc. for even the simplest application is huge. Again, the same more or less applies to eclipse.
Hate: Eclipse, libraries, Oracle, debug everywhere, accidental complexity, etc
Depending on your background and the environments you use, your experience may vary ... Greatly !
Memory-mapped shared libraries? No. Copy-on-write fork()? No. Memory protection? Basically, no. Can be reasonably used to implement ls(1)? No.
Another reason why I hate Java is that there are going to be at least 3 people who reply to this saying that Java isn't slow.
-1 Has lots of boilerplate that requires an IDE to stay sane
+1 Pretty fast, good JVM
-1 encouragement from the Java community to write slow code
+1 Easy-to-understand code through interfaces
-1 Unnecessary interfaces and failing unit tests (for stupid reasons) cancels out productivity increases
and, JNI is like an affair