기본 유형은 스택에 저장되고 참조 유형은 힙에 저장됩니다. JavaScript는 변수(객체, 문자열 등)가 생성될 때 자동으로 메모리를 할당하고, 사용되지 않을 때 "자동으로" 해제합니다. 릴리스 프로세스를 가비지 수집이라고 합니다.
가비지 수집 전략
가비지 수집기가 수행해야 하는 모든 작업
공간에 활성(라이브) 개체와 비활성(비라이브) 개체를 표시
비활성 객체가 차지하는 메모리를 재활용 또는 재사용
메모리 조각화 발생을 방지하기 위한 메모리 구성
가비지 객체란 무엇인가요?
일반적으로 참조되지 않는 객체는 가비지이므로 삭제해야 합니다. 루트부터 시작하여 객체를 탐색합니다.
예외
여러 개체 참조가 링을 형성하고 서로를 참조하지만 루트에서 액세스할 수 없는 경우 이러한 개체도 가비지이므로 지워야 합니다.
루트 개체와 생존 개체란 무엇입니까?
루트 개체
에는 명백한 이유로 삭제할 수 없는 본질적으로 도달 가능한 기본 값 세트가 있습니다.
- 전역 변수 창 전역 개체, DOM 문서 트리 루트 개체 등
- …
라이브 개체
루트에서 참조 또는 참조 체인에 액세스할 수 있는 경우 다른 값에 액세스할 수 있는 것으로 간주됩니다.
V8 엔진 재활용 세대별 재활용 방법
힙 분할 신세대와 구세대를 위해.
신세대는 생존 시간이 짧은 객체를 저장하고, 구세대는 생존 시간이 긴 객체를 저장합니다.
신세대 가비지 컬렉터의 청소 복사 알고리즘
은 힙 메모리를 두 부분으로 나눕니다. 하나는 사용 영역, 다른 하나는 사용 가능한 공간입니다. 유휴 상태의 공간.
새로 추가된 개체는 사용 영역에 저장됩니다 사용 영역이 거의 가득 차면 쓰레기 청소 작업이 필요합니다.
신세대 가비지 컬렉터는 사용 영역의 활성 개체개체를 표시합니다. 표시가 완료된 후 사용 영역의 활성 개체를 자유 영역으로 복사합니다. 메모리 블록이 분산되는 문제를 해결했습니다.
사용 공간에서 비활성 물체가 차지하는 공간을 정리하세요. 마지막으로 역할이 바뀌어 원래 사용 영역은 새로운 무료 영역이 되고, 원래 무료 영역은 새로운 사용 영역이 됩니다.
오브젝트가 Old Generation으로 이동됨
- 오브젝트가 여러 번 복사된 후에도 여전히 남아 있으면 수명 주기가 더 긴 객체로 간주되어 이후 Old Generation으로 이동됩니다.
- 객체를 자유 영역에 복사하여 자유 영역의 25% 이상을 차지하면 해당 객체가 바로 Old Generation 공간으로 승격됩니다. 그 이유는 원래 여유 공간이 새로운 사용 영역이 되고, 개체 메모리 할당이 계속 진행되기 때문입니다. 비율이 너무 높으면 새 개체에 사용할 수 있는 공간이 너무 적어집니다.
신세대 최적화 병렬 재활용
전체 일시 중지 문제
JavaScript는 메인 스레드에서 실행되는 단일 스레드 언어로 가비지 수집이 수행되면 JavaScript 스크립트의 실행을 차단하고 가비지 수집이 완료될 때까지 기다려야 합니다.
GC가 너무 오래 걸리면 페이지 정지가 발생할 수 있습니다.
병렬 재활용 메커니즘
메인 스레드에서 가비지 수집기가 실행되는 동안 여러 보조 스레드가 동시에 동일한 재활용 작업을 수행하기 시작합니다.
구세대 가비지 수집
scavenge 방법 사용 문제
1. 살아남은 객체가 많아, 살아남은 객체를 자주 복사하면 효율성이 떨어집니다
2. 공간의 절반을 낭비합니다
주로 mark-clear 방법을 사용하고, 메모리 할당이 부족할 경우 mark-organize 방법
을 사용하여 구세대 가비지 수집 기간
1. 먼저 mark-clear를 사용하여 가비지 공간 재활용을 완료합니다. 공간을 확보하려면 mark-organize를 사용하세요. 최적화
3. 효율성 최적화를 위해 최적화-증분 표시 및 지연 정리를 사용하세요.
mark-clear 및 mark-organize 알고리즘
scavenge는 살아있는 객체만 복사합니다. Clear는 죽은 개체만 지웁니다.
살아있는 객체는 신세대에서 작은 부분만을 차지하고, 죽은 객체는 구세대에서 작은 부분만을 차지하기 때문에 두 가지 재활용 방법 모두 효율적으로 처리할 수 있습니다.
단점 메모리 조각화가 너무 많습니다. 큰 메모리를 할당해야 하는 경우 조각난 나머지 공간이 할당을 완료하기에 충분하지 않고 이 수집이 필요하지 않기 때문에 미리 가비지 수집이 시작됩니다.
-> 마킹-구성 알고리즘 살아남은 객체를 메모리 공간의 한쪽 끝으로 이동한 후 경계 밖의 모든 메모리를 지웁니다.
최적화-증분 마킹 및 게으름. cleaning
증분 마킹
오브젝트가 많아 전체 오브젝트 세트를 한 번에 순회하여 마킹하려고 하면 시간이 좀 걸리고 실행이 다소 지연될 수 있습니다. 따라서 엔진은 가비지 수집을 여러 부분으로 나누려고 시도합니다. 그런 다음 각 부분이 별도로 실행됩니다.
V8은 구세대 가비지 수집기를 최적화하여 전체 일시 중지 표시에서 증분 표시로 전환했습니다.
가비지 수집을 짧은 GC 가비지 수집 기간으로 전환
흑백(생존 및 사망) 표시 전략을 채택하는 경우 가비지 수집기가 증분 수집 기간을 수행한 후 잠시 후 메인 스레드가 활성화됩니다. 애플리케이션에서 JavaScript 코드 조각을 실행한 후 가비지 컬렉터가 다시 시작되면 메모리가 흑백이 되어 다음에 어디로 가야할지 알 수 없습니다
Lazy cleanup
증가 표시 완료되면 , 게으른 정리가 시작됩니다. 증분 마킹이 완료되면 현재 사용 가능한 메모리가 코드를 빠르게 실행하기에 충분하다면 실제로 메모리를 즉시 정리할 필요가 없으며 정리 프로세스를 약간 지연시키고 JavaScript 스크립트 코드가 먼저 실행되도록 할 수 있습니다. 한 번에 모두 정리할 필요가 없습니다. 비활성 개체 메모리를 모두 지운 후 필요에 따라 비활성 개체 메모리가 모두 지워질 때까지 하나씩 정리한 다음 증분 마킹
3색 마킹을 수행하면 됩니다. 일시 중지 및 재개 방법
3색 표시 이 방법의 표시 작업은 매번 전체 메모리 공간을 스캔하지 않고 점진적으로 실행할 수 있습니다. 일시 중지 및 복구의 일부 작업을 수행하기 위해 증분 재활용과 잘 조화될 수 있습니다. 흰색: 표시되지 않음 개체
회색: 자체 표시됨, 해당 개체의 참조 개체가 표시되지 않음- 검정색: 자체 및 해당 개체의 참조 개체(화살표가 가리키는 개체)가 표시됨
- 루트 개체 집합에서 시작하여
회색으로 표시할 수 있는 개체가 없을 때까지, 즉 도달할 수 있는 개체가 없을 때까지 계속됩니다. 나머지 흰색 개체는 연결할 수 없으며 재활용을 기다리고 있습니다.
첫 번째 증분 분할에서 모든 ABC가 검은색으로 표시되고 JavaScript 스크립트가 B->D로 실행되어 두 번째 증분 분할이 시작된다고 가정합니다. 새 개체 D는 처음에는 흰색이지만 현재는 회색 개체가 없습니다. 이는 모든 표시가 완료되었으며 정리 단계에서 D가 재활용되어야 함을 의미합니다. 이것은 옳지 않습니다.
V8에는 쓰기 장벽 메커니즘이 도입되었습니다. 검정색 개체가 흰색 개체를 참조하면 이 메커니즘은 참조된 흰색 개체를 회색으로 바꿉니다.
동시 재활용
증분 표시는 총 일시 중지 시간을 늘리고 애플리케이션 처리량을 감소시킵니다
[추천 학습: javascript 고급 튜토리얼
]위 내용은 JS의 가비지 수집 메커니즘에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

Python은 데이터 과학 및 기계 학습에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 간결한 구문 및 풍부한 라이브러리 생태계로 유명하며 데이터 분석 및 웹 개발에 적합합니다. 2. JavaScript는 프론트 엔드 개발의 핵심입니다. Node.js는 서버 측 프로그래밍을 지원하며 풀 스택 개발에 적합합니다.

JavaScript는 이미 최신 브라우저에 내장되어 있기 때문에 설치가 필요하지 않습니다. 시작하려면 텍스트 편집기와 브라우저 만 있으면됩니다. 1) 브라우저 환경에서 태그를 통해 HTML 파일을 포함하여 실행하십시오. 2) Node.js 환경에서 Node.js를 다운로드하고 설치 한 후 명령 줄을 통해 JavaScript 파일을 실행하십시오.

쿼츠 타이머를 사용하여 작업을 예약 할 때 미리 쿼츠에서 작업 알림을 보내는 방법 작업의 실행 시간은 CRON 표현식에 의해 설정됩니다. 지금...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
