Auswirkungen auf die Leistung von toArray mit Array-Initialisierung
Die Frage, ob myList.toArray(new MyClass[myList.size()]) oder myList.toArray(new MyClass[0]) bietet eine bessere Leistung und hat bei Java-Entwicklern Neugier geweckt. Während der zweite Ansatz prägnanter erscheint, trifft die Annahme, dass das leere Array bei der Erstellung weggelassen wird, möglicherweise nicht immer zu.
Benchmark-Ergebnisse
Um Licht in diese Angelegenheit zu bringen wurde ein Mikrobenchmark mit Java HotSpot 8 durchgeführt. Die unten dargestellten Ergebnisse zeigen, dass die kontraintuitive toArray(new MyClass[0])-Methode durchweg eine bessere Leistung erbringt sein toArray(new MyClass[myList.size()])-Gegenstück:
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
Erklärung
Die Java Virtual Machine (JVM) und der JIT-Compiler verwenden Optimierungen, die ermöglichen es ihnen, Arrays mit der entsprechenden Größe effizient zu erstellen und zu initialisieren. Diese Optimierungen sind nicht verfügbar, wenn Arrays manuell erstellt werden.
Fazit
Basierend auf den Benchmark-Ergebnissen und weiteren Analysen im Blogbeitrag Arrays of Wisdom of the Ancients ist es offensichtlich, dass myList.toArray(new MyClass[0]) der empfohlene Ansatz für Situationen ist, in denen die Leistung ein Problem darstellt. Der Aufwand für die Erstellung leerer Arrays wird durch die Optimierungen der JVM effektiv eliminiert, was zu einer schnelleren Leistung führt.
Das obige ist der detaillierte Inhalt von`myList.toArray(new MyClass[myList.size()]) vs. myList.toArray(new MyClass[0]): Welches bietet eine bessere Leistung in Java?`. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!