나는 C/C++로 프로그래밍을 배웠다. 그래서 자바 스크립트의 메모리 관리는 나에게 결코 직관적이지 않다.자바에서의 메모리 관리
모든 변수가 스택 메모리가 아닌 힙 메모리에 있다는 것을 알고 있으므로 메모리 조작이 상당히 비쌉니다. 변수에 대한 모든 참조가 더 이상 액세스 할 수없는 경우 가비지 수집 될 수 있지만 V8에서 즉시 가비지 수집을 수행하지 않는 것처럼 보입니까? (--trace_gc
으로 관찰 됨)
전역 배열 객체의 메모리를 해제하려면 array = null
으로 수행 할 수 있으며 array = []
은 같은 효과가 있습니까? (변수를 지운 후에도 배열처럼 동작해야합니다.)
제 경험상 String
과 Number
은 값으로 함수에 전달되는 반면 Object
과 Array
은 참조로 함수에 전달됩니다. String
이 매우 크고이 함수가 실제로 참조로 전달 될 수 있도록 허용하는 경우 (문자열 만 읽음) V8에서 이와 같이 최적화됩니까?
ES6는 블록 범위 선언 let
키워드를 소개하지만, let
의 단일 사용은 전체 기능이 느려지하게, 그래서 난 아직도 익숙 C/C++에 가까운 var
도 let/const
불구하고 충실. (d8
master 브랜치에서 빌드 된 것을 사용하여 테스트했는데, V8 개발자가이 버그에 대해 적극적으로 노력하고 있음을 알고 있습니다.)
Chrome DevTools를 사용하여 내 코드의 메모리 관리를 배우려고했지만 프로파일 러의 그래프 및 차트가 실제로 의미하는 바를 파악할 수 없었습니다.
스팸 태그하지 마세요. 귀하의 질문은 C++과 아무런 관련이 없습니다. 심지어 호환성으로 사용하는 경우에도 – StoryTeller
JS에서 메모리에 대해 그렇게 많이 걱정할 필요는 없습니다. 브라우저에서 처리하도록하십시오. – Cerbrus
내가 조기에 최적화하려고 시도하고 있다는 소리를 들려줍니다. 이 경우에 해당하는지 확인하려면 [이 간단한 차트를 참조하십시오] (https://xkcd.com/1691/)를 참조하십시오. – vlaz