2017-04-19 1 views

답변

5

따라서 ~= 연산자 인 appender~이 아니라 교환합니다. ~은 항상 기존 복사본을 추가하지 않고 새 복사본을 만듭니다 (이전 복사본을 변경하지 않음). 이는 성능 문제가 발생할 때 일반적으로 피해야하는 비효율적 인 편의를 만듭니다.

하지만 어쨌든 ~=appender은 실제로 그렇게 많이 다릅니다. 중요한 차이점은 ~=이 용량 캐시를 GC에 유지하는 것입니다 (Appender). 서로 가까이있는 배열 수가 적을 경우에는 두 배열의 차이를 알 수 없을 것입니다.

그러나 많은 수의 배열을 동시에 추가하거나 멀티 스레드를 수행하는 경우 Appender의 로컬 용량 저장소는 전역 잠금을 피하기 때문에 큰 용량을 제공합니다. GC를 통해 용량 캐시를 구현할 수 있으며 다른 배열간에 전환 할 때 전역 캐시를 스 래시하지 않아도됩니다.

Appender 또한 캡슐화 된 출력 범위이기 때문에 대부분의 경우 올바른 가져 오기를 사용하여 일반 배열을 사용할 수 있지만 해당 인터페이스를 기대하는 일부 함수에 전달할 수 있습니다.

루프에서 하나의 배열을 추가하는 중이라면 ~=을 사용하면 차이가 나타나지 않을 것입니다. 사실 이러한 상황에서는 ~=이 더 빠릅니다. 하지만 차이점은 무시할 수 있습니다). 그러나 최종 결과가 아니라 appender 자체를 저장하거나 한 번에 여러 배열을 작성하거나 멀티 스레드 프로그램을 작성하는 경우 Appender을 사용하면 상당한 성능 향상을 얻을 수 있습니다 글로벌 GC 캐시를 사용할 때 경합을 피하기 때문입니다.

관련 문제