배열 수수께끼: .toArray(new MyClass[0]) 대 .toArray(new MyClass[myList.size()])
ArrayList를 처리할 때 이를 배열로 변환하는 경우가 자주 발생합니다. 이렇게 하려면 다음 두 기술 중 하나를 사용할 수 있습니다.
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!