On the surface, everything seems fine. If you do a search, you’ll see lots of people offering support for cloud-centric application frameworks. But, when I speak with companies actually moving Java applications into the Cloud or trying to create new Cloud services based on Java, I get a different story. It’s not the application in many cases that’s in the way, it’s the JVM.
An example that highlights these issues comes from one of our partners, Intalio. Intalio offers Cloud solutions based mostly on open source. They and their customers are frustrated by the fact that Java can’t take advantage of Cloud elasticity – the JVM strictly limits the amount of memory and cores an individual instance can use. To make matters worse, operators have to deploy multiple small instances (around 2-4 GBs of memory each) to keep garbage collection pauses short enough so users wouldn’t really notice the delay. Plus, managing it all is painful. Developers have to create distributed networks within individual machines, and the IT staff has to create and launch lots of new instances and tune carefully to avoid long response times delays. (Their CEO, Ismael Chang Ghalimi, describes the problem in detail in a paper called “Cloud Computing is Memory Bound – located here: http://www.intalio.com/cloud-computing-is-memory-bound.)