google 크롬 (버전 20.0.1132.47, Ubuntu 11.04 64 비트)에서 가비지 콜렉션에 관한 질문이 있습니다.'bound_this'로만 참조되는 인스턴스는 가비지 수집되지 않습니다.
힙 덤프를 비교하고 메모리 누수를 검사하는 동안 절대로 제거되지 않은 인스턴스가 발견되었습니다. 일반적으로이 동작은 프로그래머가 오류로 추적하지만,이 경우에는 차라리 우둔 해요 할 수 있습니다 ..
이
이이 인스턴스는 '610739 @ 아이가'참조 다음 스크린 샷에서보세요 자식 인스턴스 자체의 함수에 속하는 'bound_this'인스턴스에 의해서만 가능합니다. 내 이해를 위해 자식 인스턴스는 가비지 수집되어야합니다. 다른 참조는 자식 인스턴스 자체 ('bound_this'함수를 통해)를 유지합니다.
내가 ( ECMA Script wiki on bound_this)나는 여기에 분명하고 그렇다면 뭔가 실종 크롬의 'native_bind'기능에 매핑 underscore.js ''bindAll '유틸리티 기능 (underscore.js#bindAll)를 사용하고
가, 누군가가 설명 할 수 이 인스턴스들을 살아있게 유지하는 것은 무엇입니까?
업데이트 : chrominium에서 동일한 응용 프로그램을 테스트 한편 (18.0.1025.168 (개발자 빌드 134367 리눅스) 우분투 11.10)이 매달려 인스턴스를 표시하지 않습니다 ..
업데이트 2에서
:
는 다음 Esailijas는 jsfiddle 스 니펫을 제공하기 위해 힌트를 얻었습니다. 기본적으로 내가하는 것을 모방 한 하나 (http://jsfiddle.net/8gSTR/1/)를 만들었습니다. 이 바이올린을 실행하면 불행히도 응용 프로그램에서 겪고있는 잘못된 행동이 표시되지 않습니다. 내 경우에는없는
같은 기준으로 : A'-인스턴스가 여전히 참조하는 '동안 수행 힙 덤프 살아 인스턴스를 유지하는 window.o 배열의 기준에도 불구하고 있지만 비슷한 종류의 보이는 (스크린 샷 1) 크롬이이 인스턴스를 해제하지 못하게하는 이유는 무엇인지 모르겠다. ...
업데이트 3 :
숨겨진 속성을 사용하려면 loislos advice가 뒤 따른다. 그 결과 (지점 중 하나가 확장 됨) 다음 스크린 샷에서 볼 수 있지만 더 이상 나를 데려 가지 않습니다.
여기를 보지 못함 http://jsfiddle.net/uGX22/3/. 처음에는 그들은 거기에 있습니다 (힙 17 복용.3200bp에서 60000 개의 클로저로), 몇 분 기다렸다가 새로운 스냅 샷을 찍었고 힙은 6MB로 돌아 왔고 클로저는 사라졌습니다. 이걸 재현 할 수 있을까요? – Esailija
이 상황을 만든 코드를 보여 주시겠습니까? 나는 디버거의 스크린 샷에서 그것을 얻지 못한다. – Bergi
문제를 재현하기 위해 약간의 스 니펫을 만들려고 노력할 것입니다. 상황을 만든 코드는 상당히 큰 SPA의 일부이므로 추출하기 쉽지 않습니다. –