Blog

The latest expert opinions, articles, and guides for the Java professional.

A Short History of Nearly Everything Java

The different flavors of Java

JAVA SE
Java Standard Edition (SE) lets you develop and run Java applications. Java main virtues are performance, portability and versatility of devices that support running it, from servers to desktops and embedded devices.

Java SE 8, the latest version, now supports different profiles. A profile is a smaller runtime environment that includes less functionality, but provides a number of benefits. Some of them are:

  • It can be better optimized for better performance and faster start up.
  • A smaller runtime is much easier to bundle with the application, which leads to better distribution.
  • Enhanced security, because the area for attacks are smaller.

JAVA EE
Java Enterprise Edition (EE) is a standard that runs on top of Java SE. It’s an enormous runtime platform that has multiple independent implementations of each and every part. Java EE is developed by the community with the help of industry experts and provides an excellent, mature, open platform solution to cover most enterprise needs.

JAVA ME
Java Micro Edition (ME) is an runtime environment for on embedded and mobile devices in the Internet of Things.


Various implementations of Java

There are multiple implementations of the JVM specification and to be a certified JVM, an implementation must pass the Java Compatibility Kit (we’ll discuss this in detail later). For now we want to give an overview how large and lock-in free the JVM ecosystem is.

HOTSPOT
HotSpot is the official JVM implementation maintained by Oracle Corporation. Full name is “Java HotSpot Performance Engine”. This is what you get from https://java.com/download.

OPENJDK
OpenJDK is an open source implementation of the JDK developed initially by Sun Microsystems in 2006. OpenJDK is free software, licensed under GNU GPL license with the linking exception. OpenJDK is now a reference implementation and it’s source is used by Oracle to build their HotSpot JVM.

JROCKIT
A proprietary JVM originally developed by Appeal Virtual Machines and acquired by BEA Systems in 2002, became part of Oracle Fusion Middleware in 2008. Main features of JRockit were JRockit Mission Control management console and performance and memory monitoring tools, and alleged performance and scalability ease. In 2011 JRockit became free and Oracle announced plans to port notable JRockit features to OpenJDK.

IBM J9
This JVM was developed by IBM and focuses on having superb portability and easy scaling on any platform, from a mobile phone to supercomputer mainframes.

AZUL ZING
Zing is a scalable JVM implementation for Linux by Azul Systems. Zing shines at a massively multicore platforms, with memory heaps reaching hundreds of gigabytes. Zing uses a proprietary Continuously Concurrent Compacting Collector, which avoids stop-the-world pauses that typical Garbage Collection implementations require to process memory of Java applications.

Let’s do a quick count: we have HotSpot, which is based on OpenJDK, but alternatively you can go with JRockit, IBM J9 or Zing from Azul. That’s 5 different implementations of the official JVM that developers can choose from. But wait a sec…how can so many implementations with so many moving parts be in sync and work without any real major hiccups for so many years? One word:

STANDARDS!
(da-da-da-daaaah!)

This is where we turn to some experts on standards in Java, which is how such a large and diverse community can work together without screwing up everyone’s apps everywhere.

An important role of the JCP is to maintain standards, and thus enable interoperability. If all you have is a framework, even if it is open ­sourced, then it’s likely that applications built on top of that framework will differ from each other in small or large ways as the framework itself evolves, and as developers use it in different ways. The discipline of detailed specifications and strong conformance test suites make it possible to develop multiple implementations while ensuring that those who program to these implementations will not be locked ­in to a particular one. PHP is a good example. This language has been around for 20 years and has never had a formal specification. Recently, Facebook decided that they needed to replace the default Zend Engine with their own optimized virtual machine. The only way for them to figure out how the language was supposed to behave in many cases was to examine the actual Zend implementation. Obviously this was unsatisfactory, which is why they announced at this year’s OSCON that they are working on a formal specification for the language.

Bottom line: if you want multiple implementations you need formal specifications (standards). Big organizations that develop world­ class applications will always want a choice of multiple implementations that are compatible (interoperable) with each other so they aren’t locked­ in.
– ANONYMOUS EXPERT


DOWNLOAD THE PDF

Responses (5)

  1. Avatar  

    Dmitry Leskov

    September 24, 2014 @ 8:47 am

    There is at least one more certified JVM that you did not mention: Excelsior JET (www.excelsiorjet.com). Developed in Novosibirsk, Russia, it has been on the market since 2000, and was certified Java Compatible in 2005. The main distinctive feature of Excelsior JET is its Ahead-Of-Time (AOT) compiler, which takes your jar files as input and produces an optimized native executable for Windows, OS X, or Linux. AOT compilation benefits are dual: it hinders reverse engineering of your app, and at the same time improves the end-user experience through faster startup, smaller footprint and JRE-independency.

    Disclaimer: Yes, I work for Excelsior.

  2. Avatar  

    Chris Snyder

    September 24, 2014 @ 3:56 pm

    I used JET for a consumer software product at my old company. It allowed us to distribute our software without worrying about whether the customer had a JRE installed. It worked great, and Excelsior support was excellent (even though we were a tiny company not paying for a big support contract).

    I don’t have a use for JET now (everything is web-based for me at the moment), but I’m glad to hear that you’re still going strong. Keep up the good work!

  3. Avatar  

    Oleg Šelajev

    September 24, 2014 @ 4:59 pm

    Great point, Dmitry. For brevity, we didn’t describe all the existing JVM implementations, not even all the certified ones. Just the most major ones.

    So, big thanks for contributing the info!

  4. Avatar  

    Debbie Fuller

    September 25, 2014 @ 7:52 am

    Nice blog Oleg, but there is another certified JVM that was missed off from Waratek (www.waratek.com). With a team of experienced dedicated JVM developers it is Oracle certified Java compatible and was initially developed to provide multitenancy with elastic memory and application isolation. (http://www.waratek.com/blog/december-2013/capacity-planning-memory-for-real-world-jvm-applic)

    The containment and isolation that the in built hypervisor provided has since been expanded to provide ‘Runtime Application Self Protection’ for Java apps. This is the first time that RASP has been provided within the JVM. Because the JIT compiler can intelligently interpret messages, it avoids ‘false positives’ and ‘gracefully blocks’ attacks. This protects applications from SQLi, Zero Day attacks as well as providing virtual patching for Legacy Java. (http://www.waratek.com/security/how-it-works)

    We’re going to be at JavaOne and hope to meet up with you there!

    Disclaimer: Yes, I do work for Waratek!

  5. Avatar  

    Dmitry Leskov

    September 25, 2014 @ 1:18 pm

    Thank you for your kind words, Chris.

RSS feed for comments on this post.

Leave a comment