Question

Nous sommes actuellement en train de faire quelques itérations et d'autres opérations à l'aide de x++;x est un Integer et pas un int.

Les opérations peuvent être répétées tout au long de certains des opérations de l'utilisateur sur notre système, mais rien de trop complexe ou trop nombreux comme une Mathématique de l'application, maximum: jusqu'à 10000 fois par transaction de l'utilisateur..

Sera-ce déballage et plus tard de boxe sur notre rendement par certains notables millisecondes?

Était-ce utile?

La solution

http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

"La performance de la liste est susceptible d'être pauvres, comme des boîtes ou des unboxes sur tous les obtenir ou de définir l'opération.Il est beaucoup assez rapide pour un usage occasionnel, mais il serait de la folie de l'utiliser dans une critique pour les performances boucle interne.

Donc, quand devez-vous utiliser l'autoboxing et unboxing?Utilisez-les seulement quand il y a une “impédance” incompatibilité entre les types de référence et primitives, par exemple, lorsque vous avez à mettre des valeurs numériques dans une collection.Il n'est pas approprié d'utiliser l'autoboxing et unboxing pour le calcul scientifique, ou d'autres performances sensibles à code numérique.Un Entier n'est pas un substitut pour un int;l'autoboxing et unboxing de brouiller la distinction entre les types primitifs et les types référence, mais ils ne sont pas à l'éliminer."

Autres conseils

Oui, il y a un impact sur les performances.L'équivalent code produit pour ++x implique la création d'un nouvel objet Integer chaque fois. x++ crée en outre une variable temporaire pour stocker les précédentes entier de référence, et de la manipulation.Vous pouvez le vérifier par le démontage du fichier de classe.

La vitesse de l'auto-boxing dépend de la JVM version que vous utilisez, la gamme des nombres réels que vous travaillez avec, et votre GC paramètres.Voir cette vraiment intéressant article de fond sur (onu)de boxe de la performance.

Fondamentalement, la JVM caches un certain nombre de l'Entier des objets de sorte qu'il n'a pas besoin de créer de la "commune" de tous les temps.Vous pouvez configurer cette taille de la mémoire cache.

Comme pour la question spécifique:Votre opération millisecondes de plus si vous utilisez des primitives rapport à l'autoboxing?Cela dépend entièrement de la taille de la liste et à quelle fréquence elle est appelée.Il devrait être facile (je pense!) pour tester la primitive de sur l'alternative de la performance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top