자주 문자열을 할당하는 경우 Appender을 사용해야한다고 읽었지만 Appender
의 기본 작업은 ~
연산자와 다릅니다.Appender와 ~의 차이점은 무엇입니까?
둘 다 (afaik)는 메모리 할당을 위해 use GC입니다. 그래서 차이점은 무엇입니까? 그리고 다른 하나는 다른 것보다 나은가요?
자주 문자열을 할당하는 경우 Appender을 사용해야한다고 읽었지만 Appender
의 기본 작업은 ~
연산자와 다릅니다.Appender와 ~의 차이점은 무엇입니까?
둘 다 (afaik)는 메모리 할당을 위해 use GC입니다. 그래서 차이점은 무엇입니까? 그리고 다른 하나는 다른 것보다 나은가요?
따라서 ~=
연산자 인 appender
은 ~
이 아니라 교환합니다. ~
은 항상 기존 복사본을 추가하지 않고 새 복사본을 만듭니다 (이전 복사본을 변경하지 않음). 이는 성능 문제가 발생할 때 일반적으로 피해야하는 비효율적 인 편의를 만듭니다.
하지만 어쨌든 ~=
과 appender
은 실제로 그렇게 많이 다릅니다. 중요한 차이점은 ~=
이 용량 캐시를 GC에 유지하는 것입니다 (Appender
). 서로 가까이있는 배열 수가 적을 경우에는 두 배열의 차이를 알 수 없을 것입니다.
그러나 많은 수의 배열을 동시에 추가하거나 멀티 스레드를 수행하는 경우 Appender의 로컬 용량 저장소는 전역 잠금을 피하기 때문에 큰 용량을 제공합니다. GC를 통해 용량 캐시를 구현할 수 있으며 다른 배열간에 전환 할 때 전역 캐시를 스 래시하지 않아도됩니다.
Appender
또한 캡슐화 된 출력 범위이기 때문에 대부분의 경우 올바른 가져 오기를 사용하여 일반 배열을 사용할 수 있지만 해당 인터페이스를 기대하는 일부 함수에 전달할 수 있습니다.
루프에서 하나의 배열을 추가하는 중이라면 ~=
을 사용하면 차이가 나타나지 않을 것입니다. 사실 이러한 상황에서는 ~=
이 더 빠릅니다. 하지만 차이점은 무시할 수 있습니다). 그러나 최종 결과가 아니라 appender 자체를 저장하거나 한 번에 여러 배열을 작성하거나 멀티 스레드 프로그램을 작성하는 경우 Appender
을 사용하면 상당한 성능 향상을 얻을 수 있습니다 글로벌 GC 캐시를 사용할 때 경합을 피하기 때문입니다.