Java was dire. It could have been much better when released - though granted it was designed for embedded originally, but it was then arguably mis-sold.
Performance was avoidably bad in some parts of the libraries.
I recall a major rewrite of some product being started then killed because performance sucked (surely much better now, but things took far too long to change).
Memory behaviour was not fixed until java 5:
"The original Java memory model, developed in 1995, was widely perceived as broken, preventing many runtime optimizations and not providing strong enough guarantees for code safety"
(https://en.wikipedia.org/wiki/Java_memory_model)
I'd also like to add Brinch Hansen's heartfelt lament
"If programmers no longer see the need for interference control [in java's threading] then I have apparently wasted my most creative years developing rigorous concepts which have now been compromised or abandoned by programmers"
Per Brinch Hansen, Java's Insecure Parallelism - SIGPLAN Notices, April 1999
> statically typed
with type holes for arrays
> with much simpler semantics
yep, too simple. IMO it relied too much on the programmer. Generics took too long to appear also.
> Unicode support
Broken cos they didn't read the spec properly. It has problem with the BOM on UTF8 which has bitten me (can't remember the details, think it was this https://stackoverflow.com/questions/1835430/byte-order-mark-...)
The advertising budget was what drove things, not common sense. Java could have been good but it was designed badly and badly oversold.