https://wso2.com/library/blogs/goodbye-java-hello-go
Servers are far more ephemeral than before. Java, with its post-startup, just-in-time (JIT) optimization, doesn’t do well when servers do not run for a long time.
When containers come and go at a relatively rapid timescale, the startup time of a process matters a lot. When we say “Java”, it is now a massive ecosystem of dependencies that get pulled into it. This translates to both memory bloat and long startup times to get everything set up to run. Containers should ideally be up and ready to dance in milliseconds, not seconds.
With the growing scale of enterprise infrastructure, the reality is that the memory footprint and CPU consumption of a container are important parameters in managing cost. Again, due to massive bloat in the Java ecosystem, memory and CPU requirements for Java processes are significantly higher than for some other languages that are more native.
Java has also had to evolve with the changing landscape. The introduction of GraalVM native images, Project Loom for lightweight concurrency, and various optimization efforts show that Java ecosystems recognize these challenges. However, these solutions often feel like retrofitting a language and runtime designed for a different era. GraalVM native images are promising, but come with significant limitations, complexity, and size compared to native ones.
As a company that’s here for the long term, we think about the right direction for the next 5–10–20 years to deliver the right infrastructure for our customers. It is clear that Java is not the language of the future.
