개발&Development/프로그래밍 일반

GC's problem of JavaScript

겐도 2006. 7. 18. 11:28
http://www.barelyfitz.com/screencast/javascript/memory-leak/

Java 쪽에는 그나마 툴이나 IBM의 Technical Document들이 검색에 걸리지만 Java-Script쪽에는 드물다. 그래도 확실한것은..

1. Circular Referance
꼬리에 꼬리를 무는 객체 참조는 자칫 참조 서클을 만들어 버린다. 외부에서 참조하는 객체가 없어도 이경우 GC가 탐지를 잘 못하게 된다.

2. Document.write
혹은 innerHTML로 객체를 와장창 변경하는 경우.. 전에 있던 객체들이 레퍼런스가 남아 있다면 지워지지 않음에 주의. 정말 Ghost가 되어버린다.

DOM을 기반으로 스크립트 떡칠을 해 가며 Dynamic Page를 구성해 가면서 흔히 놓치는 부분이자 웹질 좀 하다보면 메모리가 부족해서 컴퓨터가 멍청해 지는 이유가 이것인 것 같다. 주기적으로 모든 IE를 닫아줘야 한다. 가끔 300메가씩 사용하고 있는 IExplorer.exe를 보니깐.

태터의 몇몇 부분에도 사실 메모리 누수의 흔적을 보고는 있지만 아직 본인이 JavaScript쪽에 지식이 부족함도 있고 메모리 누수를 탐지해 주는 툴도 부족해서 손은 못대고 있는 상황. 그래도 날잡아서 개비를;;;

여러 문서를 본 바 결론은 이전의 명시적인 메모리 관리를 하는 언어처럼 즉각 메모리 해제를 명시적으로 하라는 것. delete를 기술하듯 레퍼런스에 null 어사인을 적극 추천하는 듯 하다.

PS. 많은 웹 사이트들이 메모리 누수 문제를 가지고 있음은 자명한데 별 이슈가 안되는 것은... 메모리 업체인 S사의 로비?