Performance Implications of toArray with Array Initialization
The question of whether myList.toArray(new MyClass[myList.size()]) or myList.toArray(new MyClass[0]) offers better performance has piqued curiosity among Java developers. While the second approach appears more succinct, the assumption that the empty array is omitted from creation might not always hold true.
Benchmark Results
To shed light on this matter, a microbenchmark was conducted using Java HotSpot 8. The results, presented below, reveal that the counterintuitive toArray(new MyClass[0]) method consistently outperforms its toArray(new MyClass[myList.size()]) counterpart:
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
Explanation
The Java Virtual Machine (JVM) and JIT compiler employ optimizations that allow them to efficiently create and initialize arrays of the appropriate size. These optimizations are not available when arrays are manually created.
Conclusion
Based on the benchmark results and further analysis presented in the blog post Arrays of Wisdom of the Ancients, it is evident that myList.toArray(new MyClass[0]) is the recommended approach for situations where performance is a concern. The empty array creation overhead is effectively eliminated by the JVM's optimizations, resulting in faster performance.
The above is the detailed content of `myList.toArray(new MyClass[myList.size()]) vs. myList.toArray(new MyClass[0]): Which Offers Better Performance in Java?`. For more information, please follow other related articles on the PHP Chinese website!