Y a-t-il une raison pour laquelle dire, quelle est la coût d'une opération pour le processeur en millisecons ou des flops? Je serais incrédé dans "l'instance de", je suis entendu dire qu'ils sont très "chers"). P>
Y a-t-il des études sur cela? P>
4 Réponses :
Cela dépendra de la JVM que vous utilisez, et le coût de nombreuses opérations peut varier même dans le même JVM, en fonction de la situation exacte et de la quantité d'optimisation du JIT. P>
Par exemple, une méthode virtuelle peut toujours être inlinée par le hotspot JIT - tant qu'il n'a pas été remplacé par rien d'autre. Dans certains cas avec le serveur JIT, il peut toujours em> être inlincé avec un test de type rapide, jusqu'à quelques types de types. P>
Fondamentalement, les jits sont suffisamment complexes pour que cela soit peu susceptible d'être une réponse générale significative à la question. Vous devriez comparer votre propre situation en tant que monde réel comme possible. Vous devriez habituellement em> écrivez le code avec des objectifs principaux de simplicité et de lisibilité - mais mesure em> les performances régulièrement. P>
L'heure où le nombre d'instructions ou de cycles de comptage pourrait vous donner une bonne idée de la performance de certains code, grâce à de nombreuses optimisations, de nombreuses optimisations se produisent sur tous les niveaux d'exécution logicielle.
Ceci est surtout < / Fort> True pour les langages basés sur VM, où la JVM peut simplement sauter quelques étapes car elle sait que ce n'est pas nécessaire. P> Par exemple, j'ai lu il y a quelque temps dans un article (je vais Essayez de trouver et de le relier finalement) que ces deux méthodes sont assez équivalentes au coût (sur le hotspot jvm, c'est-à-dire): p> évidemment la première méthode fait plus de travail , mais strong> le JVM sait que le type de Ceci et de nombreuses autres optimisations font de compter des "flops" ou des cycles à peu près inutile. P> Généralement parlant un < Code> L'instanceOf code> Le chèque est relativement bon marché. Sur le hotspot jvm, il se résume à une vérification numérique de l'ID de type dans l'en-tête d'objet. P> Cet article classique décrit pourquoi vous devriez" écrire du code muet ". p> Il existe également un article de 2002 qui décrit Comment O code> a déjà été vérifié dans le si code> et peut réellement Skip strong> le Type-Vérifiez la distribution plus tard et faites-en un non-OP. p> instanceof code> est optimisé dans le hotspot jvm . p> p> p>
Une fois que la JVM s'est réchauffée, la plupart des opérations peuvent être comptées en nano-secondes (millionièmes de milli-seconde) lorsque vous parlez de quelque chose d'être coûteux, vous devez généralement dire que c'est cher par rapport à une alternative. Il est presque impossible de décrire quelque chose aussi cher dans tous les cas. P>
Habituellement, la dépense la plus importante est votre temps (et d'autres développeurs de votre équipe) en utilisant instanceof code> peut être coûteux dans le développement et le code de prise en charge du code, car il indique souvent une conception médiocre. L'utilisation de techniques appropriées sur OOP est généralement une meilleure idée. Les 10 nano-seconde et l'instance de code> peuvent prendre, est généralement relativement triviale. P>
Le coût des opérations spécifiques effectuées à l'intérieur de la CPU n'est presque jamais relavant pour la performance. Si la performance est mauvaise, c'est presque toujours à cause du code IO (réseau, disque) ou inefficace. L'écriture du code efficace est beaucoup plus sur la recherche d'un moyen de réduire la quantité globale d'opérations plutôt que d'éviter les opérations «coûteuses» (à l'exception de celles qui sont des ordres de grandeur plus coûteuses, comme IO). P>
Cela dépend de la mise en œuvre de la machine virtuelle et de l'architecture de processeur sous-jacente et potentiellement d'autres choses.