약간 배경이
저는 ExtJS3으로 대규모 JS 응용 프로그램을 개발하고 있습니다. 런타임에 사용자는 수많은 위젯을 열고 닫을 수 있으므로 메모리 사용이 늘어날 수 있습니다. Chrome's heap analyzer을 사용하여 많은 메모리 구멍을 고쳤습니다. 그러나 어떤 경우에는 범인을 찾을 수 없습니다. 힙 분석기는 GCRoot[1234]->store.items
과 같은 것을 보여 주며 저장소를 참조 할 코드 섹션을 찾을 수 없습니다.JS 엔진은 가비지 콜렉션 루트를 언제 작성합니까?
질문 V8 (또는 다른 JS 엔진) 새로운 가비지 콜렉터 루트를 만들 것이다 아래에 정확한 런타임 conditons을 무엇
? 그것을 강제로 특정 코드 패턴 (폐쇄, 평가판, 이벤트 listetes ...) 있습니까?
내가 문제는이 크롬 V8 개발자 섹션이며, V8에서 자바 스크립트를 통해 수행 할 수있는 믿을 수 없어하는 데 도움이 그것에. 가비지 콜렉터는 때때로 가비지로 간주되는 모든 객체를 제거합니다. https://developers.google.com/v8/embed#handles –
@Kamyar 참조 정리를 사용하여 코드를 작성하여 가비지 컬렉터를 "돕는"방법은 확실합니다 . 예를 들어,'var temp = ...;/* 사용 온도 * /; temp = null;'이것은'temp'가 연관된 범위를 오염시키지 않도록합니다. 그래서 그 반대가 사실인지 궁금해 : 우리는 의도적으로 JS 사용자 코드에 의해 GC 루트를 만들 수 있습니까? – user123444555621
수정. null 변수를 참조하거나 * delete * 키워드를 사용하여 스택에서 데이터를 제거 할 수 있습니다. GC가 핸들을 사용하지 않고 개체를 수집하기 시작할 때 확신 할 수는 없지만 .Net 또는 Java와는 달리 GC가 고아 수집을 시작할 수 있습니다. 객체에 접근 할 수 없으며 액세스 할 수없는 메모리를 되찾기 위해 크롬 디자이너는 웹 개발자가 GC로 엉망진창을 시작하도록 허용하지 않았다고 생각합니다. 그건 내 두 센트, 그렇게 할 수있는 문서화되지 않은 방법이있을 수 있습니다! –