Rev. 2.73

javascriptmemoryleak.jpg

인터넷 익스플로러에서 발생하는 메모리 누수(Memory Leak)현상을 발견해주는 도구인 JavaScript Memory Leak Detector가 공개되었습니다. IE Developer Toolbar와 같이 하단에 들러 붙는 구조로 모양 또한 흡사합니다.(도구 > 도구 모음(T) > 탐색 창(E) > js memory leak detector) 메모리 누수가 발생한 지점을 찾아주고 순환 참조된 자바스크립트 코드를 알려줍니다.

메모리 릭의 발생 원인은 IE의 DOM을 관리하는 JScript 때문입니다. JScript는 MS가 자바스크립트를 본따 만든 자바스크립트 호환 언어입니다. 자바스크립트 객체가 DOM 객체에 대한 레퍼런스를 포함할 때, 순환구조가 형성되고, 자바스크립트 객체의 참조가 사라지면, 가비지 컬렉터(Garbage collector)에 의해 사용되고 있던 메모리 공간을 다시금 할당해야 합니다. JScript 메모리 관리자는 순환에 대해 잘 이해하지 못하기 때문에 순환이 발생할 때 메모리 교정이 일어나지 않게 되고, 교정되지 않은 메모리를 가리켜 누수(Leaked)되었다고 합니다. 일정 시간이 지나면, 메모리 자원부족으로 브라우저가 죽어버리는 치명적인 결과를 초래하게 되는 것이죠.

아.. 괜시리 화가 치밀어서 M$에 한마디 해야겠어요.

이따위 도구들 하나도 안반갑고요! 망할놈의 릭이 발생하는 원인이나 해결하란 말예요!

Comments

Got something to add? You can just leave a comment.

  • JScript가 레퍼런스 카운팅을 하나보군요. 레퍼런스 카운팅은 참조 당할 때마다 숫자를 1씩 증가시키고, 참조 해제당할 때마다 1씩 감소시키는 방식입니다. 그러다가 숫자가 0으로 떨어질 때 메모리를 해제하면 되니까 구현하기가 많이 어렵지는 않지요. 그렇지만 쓸만한 GC는 구현이 까다롭습니다. 구현 난이도 때문에 레퍼런스 카운팅 방식을 썼나보네요.

    그런데 생각해보니 Microsoft에서 구현 난이도 때문에 그랬을 것 같지는 않은데, 좀 미스테리네요;

    reply edit

  • 일부러 그러는 것 같지 않아요?
    M$가 얄미워 죽겠어요. ㅠ.ㅠ

    reply edit

  • 저 방식은 구현이 제일 쉬워서, 그래서 파이썬 고대버젼(...), JV 가상머신 고대버젼(...)에서나 발견할 수 있는 애인데 말이죠 -_-;;
    근데 대체 왜 저랬을까요(...)

    reply edit

Your Reaction Time!

captcha

avatar