> Java > java지도 시간 > ArrayList에서 Array로: `toArray(new MyClass[0])`가 `toArray(new MyClass[myList.size()])`보다 빠른 이유는 무엇입니까?

ArrayList에서 Array로: `toArray(new MyClass[0])`가 `toArray(new MyClass[myList.size()])`보다 빠른 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-02 09:50:10
원래의
472명이 탐색했습니다.

ArrayList to Array: Why is `toArray(new MyClass[0])` Faster Than `toArray(new MyClass[myList.size()])`?

배열 수수께끼: .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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿