As a language Java is poor compared to most languages...
My pet peeve was trying to write portable C or C++ code, even across UNIX platforms, let alone when one would add Windows and or non-POSIX systems into the mix.
Java is essentially C++ as of 1991, with GC and interfaces tacked on, no user value types, and a whole series of misunderstandings of fundamentals. It represented a marvelous opportunity, squandered: abandoning C compatibility, there are so many things that could be done better. Instead, they copied the mistakes and added new ones.
Now they are on this major engineering effort trying to retrofit value types, without breaking jars compiled 25 years ago.