web-dev-qa-db-fra.com

Pourquoi existe-t-il plusieurs implémentations différentes de JVM?

En passant au-dessus d'un Java Livre, je suis tombé sur cette phrase:

Différents JVMS peuvent exécuter des threads de manière profonde différentes.

Bien que cela soit complètement compréhensible pour moi, ce code peut se comporter différemment en fonction de la mise en œuvre de la JVM sous-jacente, elle soulève la question.

Pourquoi y a-t-il plusieurs implémentations différentes de JVM en premier lieu?

Pourquoi pourrais-je, en tant que développeur, être insatisfait de la mise en œuvre officielle de la JVM que Oracle fournit et décider de constituer une autre?

46
aMimikyu

Pourquoi pourrais-je, en tant que développeur, être insatisfait de la mise en œuvre officielle de la JVM que Oracle fournit et décider de constituer une autre?

Lequel? Oracle a au moins trois implémentations JVM officielles différentes!

Quelques raisons pourraient développer une mise en œuvre JVM sont:

  • Support de la plate-forme: Vous voulez exécuter Java sur une plate-forme pour laquelle Oracle ne fournit pas de JVM. C'est la raison principale de l'existence d'IBM J9, par exemple .
  • tilisation de ressources: Vous voulez exécuter Java sur un périphérique qui n'a pas assez de ressources pour exécuter Oracle Hotspot. C'est la raison de l'existence d'Oracle Squawk et Oracle =KVM (kilobyte "signifie" kilobyte ", indiquant que ce JVM est conçu pour fonctionner sur des machines avec seulement quelques kilo-octets de RAM - essayez cela avec hotspot!), Beaucoup de , beaucoup d'autres.
  • Performance: Oracle Hotspot n'est pas assez rapide/évolutif assez/prévisible assez pour vous. C'est la raison de l'existence d'Azul Zing ou de WebSphere avec le métronome GC.
  • Licences: Peut-être que vous n'aimez pas la politique de licence d'Oracle. C'était la raison de l'existence d'une harmonie Apache et des divers projets composés de GNU Java efforts de mise en œuvre (GCJ, CLASSPATH).
  • Concurrence: Les monocultures sont mauvaises. La compétition suscite l'innovation.
  • Modes d'exécution: Peut-être que vous préférez une compilation à l'avance? C'est la raison de l'existence d'un jet Excelsior.
  • Recherche: Il existe de nombreuses recherches JVMS, telles que les Jikes RVM ou Oracle Maxine.
121
Jörg W Mittag

JVM est une abstraction. C'est une couche logicielle spécialement conçue pour permettre au Java Language d'être plate-forme-agnostique en s'appuyant sur l'existence d'un moteur d'exécution compatible des spécifications "partout".

Mais ... une taille ne correspond pas à tous. Si vous essayez de "caler" Java dans un très petit environnement, tel qu'un téléphone portable de style Android sous-alimenté (mais bon marché), vous pourriez avoir à "code de bum" très considérablement plus que fonctionnaire Oracle ™ a jugé nécessaire de le faire. Vous devrez peut-être développer une implémentation de la JVM qui n'existait pas encore.

Et ainsi, c'est pourquoi il y a beaucoup de JVMS. Ils sont spécifiques à l'architecture et à la situation, de sorte que Java ne doit pas être.

0
Mike Robinson