>>Java's JVM does true multithreading. The memory model is tight, efficient, and predictable. The language includes useful mechanisms for writing for concurrency (everything from traditional locking mechanisms to concurrent data structures and the convenient "synchronized" keyword). Productive, predictable concurrency is possible in Java and not in many other languages.
The JVM is bloated, in-efficient and the threading non-deterministic and you have no control over the threads once they are spawned.
>>Java includes a lot of well-organized, stable libraries for doing everything from handling HTTP requests and crafting responses to doing cryptography. Its collections API has many data structures that just aren't present in other languages without looking to a third party.
Java includes a lot of redundant chaotic kitchen sink libraries for doing lots of stuff you don't need to do and should be part of the core language. Its collections library contains many data structures that just aren't NEEDED in other languages.
>>One can write reasonably expressive, straightforward code and expect that the hotspot compiler will optimize it. It's a boon for getting maintainable, quality code out-the-door quickly.
One has to write tones of boilerplate code that can be done in an expressive, straightforward way in other languages. It is a nightmare to maintain and have quality code when there are thousands of lines of code that just aren't needed in other languages.
See what I did there ?
It is better to live rich than to die rich. -- Samuel Johnson