Java advantages and disadvantages
With its support for infinite-core multithreading, functional programming, JShell scripting and large scale deployments, Java is without a doubt the most approachable and well-rounded programming language.
However, no programming language is perfect, and while the number of Java disadvantages are few, there are some Java platform drawbacks.
Here are the most significant Java disadvantages people should be aware of if they plan to deploy their applications to the Java platform:
- Non-native performance.
- Lack of low-level programming support.
- Threat of vendor interference.
- Confusing licensing models.
- JDK distro proliferation.
Non-native runtime performance
One of the biggest benefits of Java is that it’s cross-platform and architecture-neutral, but that compelling feature comes with a cost.
To abstract away a computer’s architecture and OS, Java runs on a virtual machine, or JVM, which adds an extra layer to the application deployment stack.
This extra layer means Java running on a JVM can only achieve near-native performance, while code written in C++ or Rust can be compiled into binary code and take full advantage of every CPU clock cycle.
Nevertheless, Java performance approaches that of C and C++, and projects such as Quarkus enable Java microservices to be compiled right down to binary, so the virtual machine issue goes away.
Lack of low-level pointer support
One of the most common sources of security breaches, memory leaks and bug reports in languages such as C and C++ is incorrect or malicious use of pointers.
Java intentionally omitted direct pointer access and the ability to perform low-level pointer arithmetic from the language to make it more robust and secure.
While the removal of low-level functions does make Java more robust and secure than languages including C and C++, the lack of pointer support is a real disadvantage of Java to developers who work on device drivers, hypervisors and operating systems.
Threat of vendor interference
Sun Microsystems created Java, and Oracle gained ownership of Java when it acquired Sun in 2009.
Oracle owns the Java trademark and theoretically has the final say about how the platform moves forward. Many see this as a major disadvantage of Java.
There certainly has been times in Java’s history where Oracle has moved in ways that upset the Java community. Consider the multiyear, multibillion-dollar lawsuit against the unlicensed use of Java in Google’s Android operating system. Or Oracle’s refusal to let Eclipse use the Java trademark when the open-source community took over the enterprise Java platform, necessitating a name-change from Java to Jakarta.
However, other than some delayed feature releases during the tumultuous time when Oracle acquired Sun, it’s hard to identify any palpable drawbacks to Oracle’s ownership.
The fact is,
The Java community was always skeptical about the direction Oracle might push Java. But the fact is, thanks to leadership including Mark Reinhold, chief architect in the Java platform group and Brian Goetz, architect for the Java language, the company couldn’t be more committed to the Java platform.
Nobody could look at the way Java has evolved under the direction of Reinhold and Goetz and conclude that their direction was driven by anything but the best interests of the community, not the interests of Oracle’s C-suite.
Furthermore, changes to the APIs and frameworks that fall under Oracle’s domain are all community-driven through the Java Community Process (JCP). While a vendor does own the Java trademark, the Java community continues to steer the platform.
Confusing licensing models
Java is free to use if you use a free distribution.
However, many vendors provide additional support to companies that put Java applications into production. This additional support comes with a cost.
Every once in a while Oracle updates its licensing model. Under the Oracle licensing model, large corporation must pay for the JVMs they use.
This always sends the software community into a tizzy. Many misinterpret the message as a move by Oracle to shut down projects such as Adoptium or OpenJDK, and end the right for users to install Java for free.
The licensing model can be confusing, and Oracle rarely gets its messaging right when it comes to who is required to pay for the use of their JDK.
The confusion around licensing models is definitely a disadvantage of Java. Users just need to remember that while Oracle may license their version of the JDK, there’s always a free distribution of Java available.
Proliferation of JDK distributions
The Java language is open source.
That’s why it was so easy for Google to copy it and build the Android operating system out of it.
Because Java is open-source, vendors iincluding Red Hat, Amazon, Azul, IBM, Microsoft and others have built their own fully compatible JDK distributions that are specifically optimized for their platforms.
The open-source nature of Java is definitely a huge benefit. Furthermore, the biggest IT vendors in the world actively build upon the OpenJDK, improving it and tweaking the Java platform for maximum optimization and performance which helps the Java community significantly.
However, which JDK distribution to choose can get confusing, especially when a developer must choose between:
- OpenJDK builds from Oracle.
- Oracle’s licensed distribution.
- OpenJDK, which is now Adoptium.
- Azul’s high-performance distros.
- IBM’s Java runtime.
- Amazon Corretto.
- Red Hat’s OpenJDK distro.
- The Microsoft build of OpenJDK.
- High-performance GraalVM.
The number of distributions can be confusing. However, the choice of which JDK to use really isn’t that difficult.
Anyone who is new to the Java platform should just use the Adoptium, the free distribution of the OpenJDK.
For organizations who plan to put Java code into production, compare your cloud vendor’s JVM against the performance and cost of a vendor such as Azul, and make a decision that works best for your company.
The expansive JDK landscape may seem like a disadvantage of Java, but it’s really an indication of the continued strength of the Java community and platform.