Java has been the language of choice for the last 25 years but the tech world looks very different now than it did in 1995. Java was designed for dynamic, monolithic applications, but tech infrastructures are now powered by containers, microservices, cloud-native and serverless platforms.
The current challenge for companies and Java developers is to adapt the language to this new environment. There are several ways to do that, including Quarkus from Red Hat.
James Falkner, technical product marketing director for Red Hat Runtimes, said cloud computing changed the entire calculus of enterprise computing, especially for Java, which was designed to maximize performance at the expense of the infrastructure’s footprint.
“Now instead of spending half a million dollars to get a small web application up and running, it costs 16 cents or so an hour to do that,” Falkner said.
Falkner said that software engineers have made efforts over the last several years to optimize Java for cloud environments with garbage collection apps and just-in-time compiler services.
“All of those optimizations have started to result in diminishing returns and it takes a lot of effort to make a very small gain these days,” he said.
SEE: Top 5 programming languages for systems admins to learn (free PDF) (TechRepublic)
This is where modernization efforts such as Quarkus, Jakarta EE and Spring/Spring Boot come in. Red Hat released Quarkus about two years ago and Jarkarta EE came out a few months before.
Falkner said Quarkus is a run-time Java framework designed for cloud computing. Quarkus uses a container-first approach and lowers memory usage and increases startup times using these tactics:
- Support for Graal/SubstrateVM
- Build-time metadata processing
- Reduction in reflection usage
- Native image preboot
According to Red Hat, Java applications built with Quarkus consume one-tenth of the memory compared to traditional Java and start up as much as 300 times faster. These changes can greatly reduce the cost of cloud resources.
In addition to making Java applications smaller and faster, Quarkus can lower the cloud learning curve for Java developers, Falkner said.
“This provides developers a much smoother experience when building applications for Kubernetes,” he said. “We don’t want customers to see Java as a dead-end so this provides them a path forward.”
Oracle engineers also are thinking about how to modernize Java for the cloud computing world. Chad Arimura, vice president of Java developer relations at Oracle, said the team thinks of Java modernization in terms of developer productivity, asynchronous scale, interoperability with native platforms, density, and optimization of garbage collection for large long-lived applications.
“Long-term investment in these areas will help Java continue to thrive in areas like machine learning and microservices while continuing to provide scale to some of the world’s largest and most important applications,” he said.
In the 2020 Jakarta EE Developer Survey Report, the Eclipse Foundation’s research found that Spring/Spring Boot continues to be the leading framework for building cloud-native applications. However, its share of the market dropped from 57% in 2019 to 44% in 2020. Jakarta EE was the second-place cloud-native framework at 35% usage in the 2020 survey. Eclipse Microprofile came in at third place at 29%.
The report notes that Quarkus quickly became popular among developers. Since its release in early 2019, 16% of developers use the framework, putting it in fourth place. The survey was conducted in the spring of 2020 and included 2,180 respondents.
The survey report also notes that the use of microservices architecture for implementing Java systems in the cloud dropped slightly with 43% of respondents saying they used microservices in 2019 compared to 39% in 2020. The use of monolithic architecture for implementing Java systems in the cloud doubled from 13% in 2019 to 25% in 2020.
Java modernization at Oracle
Oracle sees areas of future innovation for the Java SE Platform in these six pillars:
- Panama: Higher performance and easier development of I/O intensive applications through Java-native platform enhancements
- Valhalla: Higher density and performance of machine learning and big data applications through the introduction of Value Types
- Loom: Massively scale lightweight threads, making concurrency simple again
- Amber: Continuously improve developer productivity through evolutions of the Java language
- Metropolis: Implement more of the JVM in Java starting with the JIT compiler “Java-on-Java”
- ZGC: Create a scalable low latency garbage collector capable of handling large heaps
In a blog post about Java application modernization, Oracle senior product manager Orlando Gentil describes these options for moving to the cloud:
- Move without change: This depends on how the existing infrastructure is built.
- Move and improve: This can include scaling horizontally or vertically, adding redundant server behind a load balancer, or implementing database replication to name a few options.
- Move and upgrade: This could mean upgrading the stack, deploying separate environments for test/QA/production or upgrading platform versions.
- Move with re-platforming: This involves moving away from proprietary hardware and taking advantage of new technologies.
- Move just what is needed: This hybrid approach allows you to modernize some elements of the existing infrastructure while preserving others until the end of its lifecycle.