web-dev-qa-db-fra.com

OpenJDK vs Java HotspotVM

OpenJDK VM et Oracle Hotspot VM sont-ils toujours deux JVM différentes?)

Je n'arrive pas à trouver de documentation quelque peu officielle sur quoi que ce soit à propos d'OpenJDK VM. Même sur la page d'accueil d'OpenJDK, il existe un groupe HotSpot qui développe HotSpot VM.

Le groupe HotSpot est composé de développeurs impliqués dans la conception, l'implémentation et la maintenance de la machine virtuelle HotSpot

Cependant, si je vérifie Java -version sur ma machine Windows, il s'imprime

Machine virtuelle serveur Java HotSpot (TM) 64 bits

Mais sur mon VPS Ubuntu

VM serveur OpenJDK 64 bits

S'il s'agit de deux VM différentes, quelles sont les principales différences entre elles? Ont-ils différents ensembles d'indicateurs d'exécution?

18
arvist

Oracle HotSpot JVM est basé sur le projet OpenJDK HotSpot. Il s'agit donc essentiellement de la même machine virtuelle, sauf qu'Oracle JVM possède quelques fonctionnalités commerciales supplémentaires, principalement Java Flight Recorder , Application Class Data Sharing et Cooperative Memory Management.

Les indicateurs d'exécution sont presque les mêmes pour les deux machines virtuelles; voir la liste complète en utilisant

-XX:+UnlockDiagnosticVMOptions -XX:+UnlockCommercialFeatures -XX:+PrintFlagsFinal

Depuis JDK 8u131, la seule différence réside dans les drapeaux suivants (absents dans OpenJDK VM):

 bool EnableResourceManagementTLABCache         = true         {product}
 bool EnableSharedLookupCache                   = true         {product}
 bool FlightRecorder                            = false        {commercial}
ccstr FlightRecorderOptions                     =              {product}
 bool LogCommercialFeatures                     = false        {product}
ccstr MemoryRestriction                         = none         {commercial}
 bool ResourceManagement                        = false        {commercial}
 intx ResourceManagementSampleInterval          = -1           {commercial}
ccstr StartFlightRecording                      =              {commercial}
 bool TraceSharedLookupCache                    = false        {product}
 bool UnlockCommercialFeatures                 := true         {commercial}
 bool UseAppCDS                                 = false        {commercial}
13
apangin

tl; dr

Le Réponse acceptée par apangin est maintenant obsolète.

Pour les versions récentes telles que Java 11, le produit Oracle JDK est pratiquement identique au projet OpenJDK. OpenJDK inclut désormais les offres précédentes d'Oracle: Java Flight Recorder , Java Mission Control , Application Class-Data Sharing , and ZGC .

Pour citer le blog Oracle.com :

A partir de Java 11 en avant, donc Oracle JDK builds et OpenJDK builds seront essentiellement identiques.

Oracle JDK & OpenJDK convergent

Oracle a apporté des changements spectaculaires au cours des deux dernières années.

Oracle a déclaré son intention de faire converger son Oracle JDK avec OpenJDK vers la parité des fonctionnalités. Les deux sont basés sur la base de code OpenJDK.

À cette fin, les anciens outils commerciaux vendus par Oracle, Flight Recorder et Mission Control sont maintenant open source et donné au projet OpenJDK. Voir this et this sur le site OpenJDK.

Oracle et d'autres membres du consortium OpenJDK ont contribué encore plus de code source pour rendre la base de code OpenJDK entièrement open source et non grevée par des licences autres que l'exception GNU GPL + liaison).

Oracle a changé sa licence conditions. Le produit de marque Oracle JDK n'est plus gratuit pour une utilisation en production. Alternativement, vous pouvez obtenir une distribution gratuite d'OpenJDK auprès de plus d'une demi-douzaine de fournisseurs, dont un d'Oracle. Pour tous les détails, consultez ce livre blanc essentiel rédigé par les piliers de la communauté Java, Java est toujours gratuit .

J'ai dessiné cet organigramme pour vous guider dans la sélection d'une source JDK.

Flowchart guiding you in choosing a vendor for a Java 11 implementation

Oracle se réserve le droit de corriger leur propre produit de marque pour une correction urgente ou une vulnérabilité de sécurité. Mais la société a déclaré son intention de contribuer et de se coordonner avec les autres membres d'OpenJDK. Oracle continue de détenir les marques Java et de diriger l'avenir de la plate-forme Java. Pour le système Long-Term Support (LTS)) versions 8 et 11, Oracle a cédé gestion de RedHat ( IBM ).

Motivations in choosing a vendor for Java

HotSpot contre OpenJ9

La question ici demande:

OpenJDK VM et Oracle Hotspot VM sont-ils toujours deux JVM différentes?)

Comme indiqué ci-dessus, les deux produits convergent à parité de fonctionnalités. En ce qui concerne la technologie HotSpot , lisez la suite.

HotSpot est un composant dans Oracle JDK et OpenJDK, comme expliqué ci-dessus. Le HotSpot d'aujourd'hui combine également des pièces de JRockit . Oracle a fusionné le meilleur des deux moteurs Java, les ayant acquis auprès de Sun Microsystems et BEA Systems .

Le projet AdoptOpenJDK fournit également une version d'OpenJDK utilisant Eclipse OpenJ9 (basé sur J9, donné par IBM ) comme alternative à HotSpot. Lors du téléchargement à partir du site Web AdoptOpenJDK, vous choisissez soit HotSpot ou OpenJ9 à partir de un menu.

Actuellement, les tests semblent montrer OpenJ9 comme étant beaucoup plus rapide à lancer tout en utilisant beaucoup moins de mémoire, mais HotSpot peut s'exécuter plus rapidement avec une utilisation soutenue. Mais ce n'est encore qu'un début pour OpenJ9, alors étudiez vous-même les derniers développements.

Chart showing history of HotSpot & JRockit merging, and OpenJ9 both available in AdoptOpenJDK

15
Basil Bourque