It's time to stop perpetuating the myth that all Java Enterprise Edition (EE) application platforms are a bloated mess. Overweight, over-engineered, slow performing platforms that are a burden to simply deploy Java EE applications on. There. I said it. Now can I prove the myth is unfounded? Let's see.
First let's agree on what a Java EE application platform is. I propose a minimalist definition. That being, a Java EE application platform is verified to have implemented a specific Java EE specification. The current Java EE 7 specification is extensive and runs 290 pages long. Implementing the details is no trivial task. As of the date of this article, there are eight products that have been verified by Oracle to be Java EE 7 full platform compatible implementations. Red Hat JBoss EAP 7 is one of those products. However, Apache Tomcat and Pivotal tcServer are not on the list. Neither of those products are Java EE application platforms.
Next, consider that the Java EE specification only dictates what must be implemented. Not how to implement the specification. Therein lies the source of significant differences between Java EE application platforms. There is no requirement for Java EE application platform providers to implement or share common code. While there is some common use of popular open source projects across different vendors, there are still large code differences between products. For example, JBoss EAP is a completely different code base from what is found in the Oracle and IBM products. The difference in code is going to result in many differences, including performance and memory usage, that can be discovered when comparing the platforms.
Executing and publishing performance comparisons between vendors can be a difficult task. And not just from a technical perspective. Both IBM and Oracle have terms and conditions in their respective license agreements that make it reasonably impossible for anyone to publish benchmarks run using their products. However, there are no restrictions on IBM or Oracle customers who want to run independent performance benchmarks using their own code.
Ultimately, how big or small the memory footprint of an application platform instance is will vary based on the applications deployed, the number of application instances, and the shared core services being used. When a Java EE application platform starts, it runs based on a configuration specifying what features are available and how they configured to run. So a valid question is how and when are features loaded into the server runtime and thereby start consuming memory and compute resources.
Lets take a look at JBoss Enterprise Application Platform (EAP)
The specific configuration units for features in JBoss EAP are extensions and subsystems. A subsystem provides configuration options for a particular extension that extends the core functionality of the server. Extensions are loaded as they are needed by deployments, and are unloaded when they are no longer needed. JBoss EAP ships with 38 predefined subsystems, and users can create custom subsystems if needed. Groupings of subsystems are defined in profiles to define what subsystems are available for loading and use for a server runtime.
JBoss EAP users can use pre-defined profiles, or can create custom profiles to include only the subsystems needed for a known deployment. However, in most cases this is unnecessary as JBoss EAP dynamically loads subsystems only as they are needed. Therefore, if the server or an application never uses a subsystem, it will not be loaded.
Lets take a closer look at running JBoss EAP out of the box. The default script to start JBoss EAP as a standalone sever is configured to allocate a potentially production capable gigabyte of memory for the Java virtual machine. However, JBoss EAP needs far less than that to run. In fact, after the server starts up—in less than 5 seconds—if you force a garbage collection, the memory used will be about 40-60 megabytes. Applying some basic load on the server using Apache JMeter raises the memory usage to only 200-400MB. Still, a fairly small footprint. Small enough to even run on a device like the Rhaspberry Pi.
Regardless of where you run JBoss EAP, how you should configure the Java virtual machine memory settings to handle application load will vary. However, the amount of memory required by EAP is minimal. In fact, the minimal memory used by JBoss EAP is roughly the same for running JBoss Web Server (Tomcat) or even a basic SpringBoot application deployed as a fat jar.
How does Oracle WebLogic compare?
Oracle WebLogic Server Enterprise Edition loads all classes into memory regardless of if the application is using them or not. The first time this is run the process of scanning for needed classes and establishing classloader hierarchies takes longer time than subsequent restarts where classes stored in a cache are loaded in bulk. However, in all cases, all the classes needed by the application are loaded into memory. The more classes needed, the more memory taken. Take the total amount of memory needed for a single instance and multiply that by the total number of instances, plus an amount of server administrative overhead, and you can get an idea for the total memory used by an application running on the WebLogic server.
What about IBM?
With IBM you need to distinguish between the traditional WebSphere Application Server product line and the newer WebSphere Liberty product line that was introduced in 2012.
The traditional WebSphere Application Server product line has developed a reputation for being slow and resource intensive. I believe this reputation can be traced in no small part to the generally fixed set of application services that load and initialize on startup. This includes the full Java EE platform and leaves only a few configurable extensions that can impact the memory footprint. However, as a result WebSphere Application Server does have the full programming Java EE model loaded and available by default. The downside is that all services, applications and resources are fully initialized and consuming compute resources when server startup completes.
WebSphere Liberty products are promoted by IBM as a lighter-weight and more flexible Java EE application platform option. Liberty by default starts up with a small kernel of enabled features. In fact, the default configuration offers little more than a servlet container. User configuration specifies what additional modules should be made available to the runtime. Users must know what features they need and build up a configuration to meet those needs. Initialization of configured services, applications and resources is generally delayed until they are used, in a “late-and-lazy” model. This is similar to how JBoss EAP starts and helps reduce server start times and manage the memory footprint. However, with JBoss EAP, you can avoid having to know all the Java EE features that will be needed in order to configure the server.
What’s ahead for Java EE light runtimes?
The future of lightweight Java EE containers promises to continually get better. There are two major initiatives Red Hat is involved with. First, Red Hat is a member of the MicroProfile community along with Payara, Tomitribe, IBM, and the London Java Community. The MicroProfile community goal is to provide a baseline platform definition that optimizes Enterprise Java for a microservices architecture and delivers application portability across multiple MicroProfile runtimes. The Java technology scope for this implementation is an initially planned baseline of JAX-RS + CDI + JSON-P.
Red Hat plans to offer a product in the future based on the JBoss WildFly Swarm community project with MicroProfile compatibility. WildFly Swarm offers an innovative approach to packaging and running Java EE applications by packaging them with just enough of the server runtime to "java -jar" an application. The concept of building just what is needed into a single fat jar is different from the current JBoss EAP runtime approach where subsystems are available and only loaded when needed. The WildFly Swarm approach results in a smaller solution distribution. And of course, the memory footprint of the runtime will only consume the resources needed by the deployed application.
What to take away
It is easy to find people who have heard that Java EE application platforms are resource intensive. Some of those people may have developed that opinion as a result of using the Oracle and IBM products mentioned earlier in the article. However, all is not lost.
Not everyone has dug into the details of modern Java EE application platforms like JBoss EAP. They are unaware that JBoss EAP is designed to be lightweight and efficient. They may be further unaware that Red Hat is researching and implementing technologies, and participating in open source efforts to make Java EE even more efficient. Namely, the MicroProfile community and WildFly Swarm project.
So will you go out and tell the story about how JBoss EAP is an example of how Java EE application platforms can be resource efficient? Will you help debunk the myth that all Java EE application platforms are a bloated mess? I hope you will take up the challenge.
About the author
With over thirty years in the software industry at companies like Sybase, Siebel Systems, Oracle, IBM, and Red Hat (since 2012), I am currently an AI Technical Architect and AI Futurist. Previously at Red Hat, I led a team that enhanced worldwide sales through strategic sales plays and tactics for the entire portfolio. Prior to that, I managed technical competitive marketing for the Application Services (middleware) business unit.
Today, my mission is to demystify AI architecture, helping professionals and organizations understand how AI can deliver business value, drive innovation, and be effectively integrate into software solutions. I leverage my extensive experience to educate and guide on the strategic implementation of AI. My work focuses on explaining the components of AI architecture, their practical application, and how they can translate into tangible business benefits, such as gaining competitive advantage, differentiation, and delighting customers with simple yet innovative solutions.
I am passionate about empowering businesses to not only harness AI to anticipate future technological landscapes but also to shape them. I also strive to promote the responsible use of AI, enabling everyone to achieve more than they could without it.
More like this
Browse by channel
Automation
The latest on IT automation for tech, teams, and environments
Artificial intelligence
Updates on the platforms that free customers to run AI workloads anywhere
Open hybrid cloud
Explore how we build a more flexible future with hybrid cloud
Security
The latest on how we reduce risks across environments and technologies
Edge computing
Updates on the platforms that simplify operations at the edge
Infrastructure
The latest on the world’s leading enterprise Linux platform
Applications
Inside our solutions to the toughest application challenges
Original shows
Entertaining stories from the makers and leaders in enterprise tech
Products
- Red Hat Enterprise Linux
- Red Hat OpenShift
- Red Hat Ansible Automation Platform
- Cloud services
- See all products
Tools
- Training and certification
- My account
- Customer support
- Developer resources
- Find a partner
- Red Hat Ecosystem Catalog
- Red Hat value calculator
- Documentation
Try, buy, & sell
Communicate
About Red Hat
We’re the world’s leading provider of enterprise open source solutions—including Linux, cloud, container, and Kubernetes. We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.
Select a language
Red Hat legal and privacy links
- About Red Hat
- Jobs
- Events
- Locations
- Contact Red Hat
- Red Hat Blog
- Diversity, equity, and inclusion
- Cool Stuff Store
- Red Hat Summit