2009-07-17 5 views
6

Au fil du temps, la JVM et le JIT de Sun sont devenus très intelligents. Les choses qui étaient de notoriété publique comme une micro-optimisation nécessaire ne sont plus nécessaires, car elles sont prises en charge pour vous. Par exemple, il fallait par exemple que toutes les classes possibles soient marquées comme finales, de sorte que la JVM insère autant de code que possible. Cependant, le JIT sait si votre classe est finale en fonction des classes chargées à l'exécution, et si vous chargez une classe pour rendre l'original non-final-able, elle désintroduit les méthodes et la dés-marque comme final.Micro-optimisations JVM et JIT intelligentes

Quelles autres micro-optimisations intelligentes la JVM ou JIT fait-elle pour vous?

EDIT: J'ai fait cela un wiki communautaire; J'aimerais les recueillir avec le temps.

Répondre

6

C'est impressionnant. Toutes ces choses sont faites en C++ (certainement dans la même mesure que Java). Gardez à l'esprit que les premières versions de Java ont commencé la réputation «lente» en n'ayant pas ces choses, et nous continuons à améliorer significativement au fil du temps. C'est toujours un grand domaine de recherche.

+0

bien java pourrait être intelligent mais il utilise encore beaucoup de ressources – Roch

+2

@mnml c'est moins que ce que l'opinion populaire est. pour créer un objet je pense qu'ils l'ont à quelque chose comme 2 ou 3 instructions. oui, quelque chose comme C++ est généralement plus rapide, mais les «ressources» ne sont pas seulement le processeur et la mémoire; c'est aussi des heures de travail. le matériel est bon marché, les gens sont chers. à long terme, java va souvent gagner en performance parce que son JIT est incroyable et va optimiser l'application plus que la plupart des applications C++ pourraient jamais rêver. –

+1

@Alex souhaite que je pourrais vous donner un représentant pour souligner que les gens sont des ressources. Aussi terrible que c'est de croire cela. Votre temps en tant qu'employé coûtera souvent plus d'argent à l'entreprise que de dire un téraoctet supplémentaire sur le disque dur ou un meilleur processeur dans votre ancien serveur Web. –

3

Java est plus intelligent à inline car il peut

  • code en ligne disponible uniquement lors de l'exécution ou même généré dynamiquement.
  • méthodes virtuelles en ligne (jusqu'à deux à la fois)
  • effectuer une analyse d'échappement sur les méthodes inline et les méthodes auxquelles ils ont été incorporés. (Beaucoup plus difficile à faire en C++)
Questions connexes