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 ?`
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!