2009-09-09 11 views

Répondre

3

La spécification est ce qu'une machine virtuelle Java doit mettre en œuvre et non comment elle le fait. Différentes plates-formes et différentes JVM provenant de fournisseurs tels qu'IBM et Sun utiliseront différentes implémentations, vous ne pouvez donc pas supposer quoi que ce soit à propos de la taille des octets et des cycles de processeur. Si vous voulez vraiment trouver plus d'informations, vous pouvez télécharger la source Open JDK et la parcourir, mais ce n'est qu'une implémentation et vous ne pouvez pas supposer que d'autres implémentations auront exactement les mêmes caractéristiques de performance.

+0

N'y aura-t-il pas de repères disponibles pour une machine Windows? –

+2

Plusieurs JVM s'exécutant sur Windows, un simple test de "machine Windows" ne serait pas suffisant. Un tel benchmark ne vous donnera que des informations sur une machine virtuelle Java particulière dans cet environnement. –

+0

Quelle version de Java, IBM, Sun, Open JDK, etc. Il n'y a pas de référence pour les comparer tous. – Jared

6

Comme déjà mentionné, l'information que vous cherchez n'est pas là parce qu'elle n'existe pas. Mis à part le fait mentionné également que différentes JVM peuvent implémenter des instructions (ou des combinaisons d'instructions) différemment, une même JVM peut également l'implémenter différemment. Ceci est vrai à la fois pour différentes combinaisons d'instructions (il peut être plus efficace d'implémenter des instructions de différentes manières en fonction de leur utilisation avec d'autres instructions) et pour différentes occasions d'exécution. Comme la JVM contrôle toujours l'exécution de votre programme, elle peut (et surveille) le comportement de votre programme et décide de réoptimiser le code qui est exécuté souvent (ou le code répondant à d'autres critères d'ailleurs). Cela peut entraîner, par exemple, que votre instruction soit traduite en un certain ensemble d'instructions machine, le premier millier de fois une fonction est exécutée, et en cours de traduction vers un autre ensemble le reste des exécutions. Cette capacité d'optimisation avancée (et d'autres) explique pourquoi l'optimisation du code octet Java est préférable à la JVM et pourquoi, dans certains cas, un programme Java peut être significativement plus rapide que le programme C ou C++ équivalent (C et C++ est normalement optimisé statiquement alors que Java est optimisé dynamiquement).

+0

Tout va bien, sauf pour "significativement plus rapide". Je n'ai pas encore vu cela être le cas n'importe où mais sur le papier. –

+0

@Pavel Minaev: vous pouvez jeter un oeil à ce lien, http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ –