Las implementaciones de JVM pueden diferir en la forma en que implementan compilación JIT, optimizaciones, recolección de basura, plataformas compatibles, versión de Java admitida, etc. Todas deben cumplir un conjunto de características y comportamientos para que ejecute sus códigos de bytes de Java correctamente.
Como ha señalado, la principal diferencia suele ser la concesión de licencias. Otras diferencias no técnicas suelen ser las opciones de soporte gratuito/pago, la integración con otras tecnologías (generalmente servidores J2EE) y el acceso al código fuente.
Nota: Mientras que un servidor J2EE se ejecuta en la JVM, algunos servidores tienen herramientas integradas para supervisar, analizar y ajustar el rendimiento de JVM.
En cuanto a las diferencias técnicas, han ido perdiendo importancia a lo largo de los años. Érase una vez, las JVM de IBM y JRockit tenían un rendimiento muy superior a la implementación de Sun de referencia. Esto se debió a las diferencias significativas en los tipos de optimizaciones de tiempo de ejecución, las diferencias en la recolección de elementos no utilizados y las diferencias en el código nativo (y la cantidad de código nativo que usan varias clases). Estas diferencias de rendimiento ya no son tan significativas.
Algunas JVM también incluyen o integran herramientas de diagnóstico y monitoreo. JRockit incluye un conjunto de herramientas para controlar el rendimiento de su JVM. Sun proporciona varias herramientas basadas en JMX con funciones superpuestas para hacer lo mismo. IBM Websphere alguna vez incluyó un conjunto similar de herramientas para todo su servidor de aplicaciones J2EE (no estoy seguro si todavía lo hacen, pero supongo que eso sigue siendo cierto) ...
Algunas de las JVM de código abierto tienden a tener un rendimiento un poco más lento porque se han reconstruido desde cero. Como tal, tienen un poco más de ponerse al día para hacerlo. La última vez que lo revisé, hace 2 años, Blackdown fue significativamente más lento (1.5x-2x?) Que Sun JVM. También estaba un poco atrás de las versiones compatibles de Java.
Como alguien forzado a utilizar JRockit por más de 5 años, diría que, en general, no es más rápido que el Hotspot, pero definitivamente no es tan robusto. Sacrifican la fiabilidad por la velocidad y terminan sin nada. – erickson
@erickson, como alguien que ha usado JRockit voluntariamente por más de 5 años, puedo decir que sus experiencias no son universales. JRockit también ha guardado al menos una vez con su herramienta de detección de fugas de memoria. :) No he tenido más accidentes con él que con las VM de Sun (aunque ha habido 1 o dos). – jsight