配列の難問: .toArray(new MyClass[0]) 対 .toArray(new MyClass[myList.size()])
ArrayList を扱う場合、配列への変換が頻繁に発生します。これを行うには、次の 2 つの手法のいずれかを使用できます:
// Option 1: Specify Array Size MyClass[] arr = myList.toArray(new MyClass[myList.size()]); // Option 2: Blank Array MyClass[] arr = myList.toArray(new MyClass[0]);
パフォーマンスの点で、予期せぬ発見が明らかになりました。Hotspot 8 では、空の配列を使用すると、驚くべきことに事前サイズ バージョンよりもパフォーマンスが優れています:
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
JVM および JIT コンパイラーは、新しい正しいサイズの配列の作成と初期化を最適化します。ただし、これらの最適化はユーザーが作成した配列には適用できません。したがって、空の配列を使用すると、JVM がこれらの最適化を実行できるようになり、パフォーマンスが向上します。
以上がArrayList から Array へ: `toArray(new MyClass[0])` が `toArray(new MyClass[myList.size()])` より速いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。