Maison >Java >javaDidacticiel >`myList.toArray(new MyClass[myList.size()]) vs myList.toArray(new MyClass[0]) : qu'est-ce qui offre de meilleures performances en Java ?`

`myList.toArray(new MyClass[myList.size()]) vs myList.toArray(new MyClass[0]) : qu'est-ce qui offre de meilleures performances en Java ?`

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-28 09:16:12225parcourir

`myList.toArray(new MyClass[myList.size()]) vs. myList.toArray(new MyClass[0]): Which Offers Better Performance in Java?`

Implications sur les performances de toArray avec l'initialisation du tableau

La question de savoir si myList.toArray(new MyClass[myList.size()]) ou myList.toArray(new MyClass[0]) offre de meilleures performances et a piqué la curiosité des développeurs Java. Bien que la deuxième approche semble plus succincte, l'hypothèse selon laquelle le tableau vide est omis lors de la création peut ne pas toujours être vraie.

Résultats du benchmark

Pour faire la lumière sur cette question , un microbenchmark a été réalisé à l'aide de Java HotSpot 8. Les résultats, présentés ci-dessous, révèlent que la méthode contre-intuitive toArray(new MyClass[0]) surpasse systématiquement ses toArray (nouvelle contrepartie MyClass[myList.size()]) :

Benchmark                      (n)  Mode  Samples    Score   Error  Units
c.a.p.SO29378922.preSize         1  avgt       30    0.025 ▒ 0.001  us/op
c.a.p.SO29378922.preSize       100  avgt       30    0.155 ▒ 0.004  us/op
c.a.p.SO29378922.preSize      1000  avgt       30    1.512 ▒ 0.031  us/op
c.a.p.SO29378922.preSize      5000  avgt       30    6.884 ▒ 0.130  us/op
c.a.p.SO29378922.preSize     10000  avgt       30   13.147 ▒ 0.199  us/op
c.a.p.SO29378922.preSize    100000  avgt       30  159.977 ▒ 5.292  us/op
c.a.p.SO29378922.resize          1  avgt       30    0.019 ▒ 0.000  us/op
c.a.p.SO29378922.resize        100  avgt       30    0.133 ▒ 0.003  us/op
c.a.p.SO29378922.resize       1000  avgt       30    1.075 ▒ 0.022  us/op
c.a.p.SO29378922.resize       5000  avgt       30    5.318 ▒ 0.121  us/op
c.a.p.SO29378922.resize      10000  avgt       30   10.652 ▒ 0.227  us/op
c.a.p.SO29378922.resize     100000  avgt       30  139.692 ▒ 8.957  us/op

Explication

La machine virtuelle Java (JVM) et le compilateur JIT emploient des optimisations qui permettent pour créer et initialiser efficacement des tableaux de la taille appropriée. Ces optimisations ne sont pas disponibles lorsque les tableaux sont créés manuellement.

Conclusion

Basée sur les résultats de référence et une analyse plus approfondie présentée dans l'article de blog Arrays of Wisdom of les Anciens, il est évident que myList.toArray(new MyClass[0]) est l'approche recommandée pour les situations où les performances sont un problème. La surcharge de création de tableaux vides est efficacement éliminée par les optimisations de la JVM, ce qui entraîne des performances plus rapides.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn