Вместе с успехом приходят и конкуренты.
Так, например, в 2002 году Microsoft выпускает аналогичный продукт — C#, идейно очень близкий язык со своим байт-кодом и средой исполнения.
Со временем C# также стал и кроссплатформенным. Конкуренция в языках возрастала. Большой возраст и бремя обратной совместимости мешает быстрому развитию языка.
Например, у Java имеются следующие недостатки:
- Слабая система типов: слабые generic-типы, отсутствие пользовательских value-типов;
- Медленные темпы развития стандартной библиотеки и языка в целом;
- Отсутствие современных методов асинхронного программирования async/await, yield return;
- Отсутствие многих выразительных средств, которые давно есть в других языках: экстеншинов, перегрузки операторов и т. д.
На той же платформе JVM возникают другие языки и технологии, призванные добавить выразительности языку. Так появляются Scala, Java+Lombok, Kotlin. Особенно быстро ее вытесняет Kotlin. Эти два языка могут совместно использоваться в одном проекте, что сильно снижает порог входа для новых программистов. В андроид-разработке Kotlin фактически уже заменил Java.
Cреда исполнения JVM продолжает совершенствоваться. Улучшается технология сборки мусора и JIT-компиляция, благодаря чему Java до сих пор остается в лидерах по скорости исполнения среди языков с управляемой памятью.