2023. 2. 26. 14:59ㆍ카테고리 없음
자바스크립트는 객체를 생성할 때 자동으로 메모리를 할당하고, 필요치 않을 때 자동으로 해제하는 작업이 수행됩니다. 이를 위해 크롬 같은 브라우저에서는 다양한 가비지 컬렉션 기법이 수행되고 있습니다. 가비지 컬렉션의 정확한 동작 방식 및 전략은 자바스크립트 엔진의 버전에 따라 다를 수 있으며 성능 및 메모리 사용에 영향을 미치는 중요한 요소입니다.
가비지 컬렉션(Garbage Collection)
가비지 컬렉션(Garbage Collection)은 메모리 관리 기법 중 하나로, 자바스크립트가 실행되는 동안 생성된 가비지(미사용 객체)를 수집하여 더 이상 사용되지 않는 객체(가비지)를 자동으로 식별하고 메모리를 회수하여 메모리 누수를 방지하는 작업을 말합니다. 웹 애플리케이션에서 자바스크립트 실행 도중에 가비지 컬렉션 작업이 발생되면 자바스크립트 실행이 잠시 멈추는 "일시적인 정지(stop-the-world)"현상이 발생하게 됩니다.
가비지 컬렉터(Garbage Collector)
실제로 가비지 컬렉션을 수행하는 주체를 말합니다. 가비지 컬렉터는 해당 기능을 구현하는 알고리즘과 코드로 이루어진 구체적인 컴포넌트로, 가비지 컬렉션 알고리즘을 구현하고 실행하여 사용되지 않는 메모리를 식별하고 해제합니다. 가비지 컬렉터는 프로그램 실행 중에 메모리 할당과 해제를 추적하고, 가비지 컬렉션의 실행 시점을 결정하여 최적의 성능과 메모리 사용을 유지합니다.
즉, 가비지 컬렉션은 메모리 관리를 위한 개념
가비지 컬렉터는 이 개념을 실제로 구현하고 실행하는 역할을 담당함으로써
개발자가 명시적으로 메모리 할당과 해제에 대해 관리할 필요를 없게 해줍니다.
Minor GC
Minor GC는 주로 브라우저의 메모리 힙(heap)의 적은 부분에서 발생하는 가비지 컬렉션으로, 자바스크립트가 실행되는 동안 생성된 가비지(미사용 객체)를 수집하는 프로세스를 의미합니다. Minor GC는 작은 객체들이 생성되고 제거되는 경우에 다른 가비지 컬렉션 단계와 비교하여 비교적 짧은 시간동안 필요없는 객체의 메모리 해제를 위해 실행되며, Minor GC는 가비지 컬렉터가 실행될 때 정지 시간을 최소화하기 위해 작은 범위에서 가비지 컬렉션을 수행함으로써 전체 애플리케이션 실행에 미치는 영향을 최소화하는 데 중점을 둡니다.
크롬 Performance 텝의 Main 쓰레드 섹션에서는 노란색 GC 영역을 살펴 볼 수 있는데, 많은 양의 메모리를 잡아먹는 함수라면 함수 실행 중간 중간에 GC가 실행되어 메모리가 바닥나지 않도록 정리되는 모습을 확인 할 수 있습니다.
가비지 컬렌터가 자주 실행되는 것은 함수가 오래 실행되었다는 뜻이고, 코드 즉 함수를 최적화를 통해 실행 시간 단축이 필요함을 의미합니다. Minor GC를 관찰하면 자바스크립트 실행 도중 가비지 컬렉션의 작동을 시각적으로 확인할 수 있고, 이를 통해 가비지 컬렉션의 타이밍과 빈도를 파악하고, 애플리케이션의 성능 및 메모리 사용을 파악할 수 있습니다.
Major GC
Major GC은 메모리 힙(heap)의 큰 부분에서 발생하는 가비지 컬렉션으로 전체 애플리케이션 실행에 미치는 영향이 큽니다. 주로 큰 객체들이 생성되고 제거되는 경우나, 오랜 시간 동안 사용되었던 객체들을 수집하는 작업을 말합니다. 보다 드믈게 실행되며 일시적인 정지(stop-the-world)는 메모리 관리를 위해 필요하지만, 실행 중인 애플리케이션에는 일시적인 지연이 발생할 수 있습니다.
네트워크 탭에서 웹 애플리케이션에서 Major GC는 메모리 사용량이 증가하거나 자바스크립트 실행 시간이 길어지는 등의 신호로서 나타날 수 있습니다. 네트워크 탭에서 Major GC를 관찰하면 가비지 컬렉션의 주요 동작을 시각적으로 확인하고, 메모리 사용 패턴과 애플리케이션 성능에 대한 정보를 파악할 수 있습니다. Major GC는 메모리 관리의 중요한 측면이며, 최적화된 메모리 사용과 가비지 컬렉션은 웹 애플리케이션의 성능 향상에 기여할 수 있습니다.
Posted by Ang