BLOG main image
분류 전체보기 (19)
(1)
(2)
(1)
JavaScript (3)
Lambda Calculus (0)
The Ethereal Void (8)
Log (0)
.NET w/ C# (1)
34,632 Visitors up to today!
Today 1 hit, Yesterday 9 hit
daisy rss
tistory 티스토리 가입하기!
'garbage collector'에 해당되는 글 1건
2007/03/22 01:53
자야되는데 잠은 오질 않고 새벽 두시가 다 되어간다. 개인적으로 매력인 언어로만 생각하고 있었지, 그 속의 무수한 내용들을 아직 인지가 부족하다. Ajax 책은 많이 나왔지만, 그 역시도 조금 더 나은 스크립팅 팁의 수준에서 머물고 있다.

정말 이렇게 대중적이면서 평가절하되고 몰이해되는 언어가 또 있을까 생각을 해보았다. 일전에 VBscript 대신 Jscript로 Server Page를 작성하면서, Server-Side 언어로써 JavaScript가 얼마나 매력적이면서 불완전한지를 경험한 적이 있었다. 그러면서도 계속 빠져드는건..? 알수가 없다.

Garbage Collector에 대한 내용을 정리중이다. 일단 가장 흔히 인지되고 있는 IE 메모리 누수현상중 순환참조에 대한 부분을 생각해 볼려고 한다.

먼저 순환 참조에 대한 일반적인 이해에는 Garbage Collector에 대한 간단한 작동 방식을 이해해야 된다.

다음 코드를 보자.
var Vervain = new Herb();
var Verbena = Vervain;
Vervena 가 객체 Vervain을 참조하게 되면 scope 내에 Vervain에 대한 참조카운트가 1이 증가한다. 그리고 실행이 끝나고, scope 를 벗어날 때 해당 scope 내에 Verbena는 파괴되게 된다. 그렇게 되면 Vervain 객체에 대한 참조카운트는 다시 1이 감소한다. 그렇게 되면 GC에서는 Vervain의 참조카운트가 0이 되었으므로 더 이상 사용하지 않는 객체로 판단하고 메모리를 해제하게 된다.

하지만 다음과 같은 경우는 어떨까?

var Vervain = new Herb();
var Verbena = new Herb();
Vervain.see = Verbena;
Verbena.see = Vervain;
Vervain과 Verbena는 서로를 참조하고 있다. 이러한 경우를 순환참조라고 한다. 객체에 대한 참조를 따라가 보면 완전한 연결고리를 형성하게 된다.

하지만 위와 같은 경우는 어떻게 메모리를 해제해야 될까? Vervain과 Verbena의 참조카운트는 모두 1이다. Vervain 를 해제하기 위해서는 Vervain에 대한 참조카운트가 0이 되어야 하는데, 이는 Verbena.see 가 Vervain을 참조하고 있다. 역으로 Verbena에 대한 참조카운트도 0이 되어야 하나 Vervain.see 는 Verbena를 참조하고 있다. 결국 이러한 순환참조는 메모리 누수현상을 가져오게 된다. (IE 7에선 이러한 문제가 해결되었다.) 이러한 메모리 누수현상을 방지하기 위해서는 위와 같은 순환 참조를 형성하지 않거나, Vervain.see = null 혹은 Verbena.see = null 을 할당함으로써 참조카운트를 0으로 만들어 GC에서 메모리를 해제하게끔 만들어야 한다.




이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback Address :: http://vervain.tistory.com/trackback/62
BlogIcon 건이아빠 | 2007/03/22 08:26 | PERMALINK | EDIT/DEL | REPLY
안녕하세요 ~ 좋은 정보 감사합니다.
블로그 주제로 JavaScript 를 생각하고 있는데 경쟁 블로그가 되는건가.하.하.
그런데 예제에 쓰신 변수명이 특이 하네요.
보통 foo, bar 이런거 쓰는데 Verbena, Vervain 은 첨보네요.
철자가 비슷해서 잠시 헷갈렸습니다 ^^;;
꾸준한 업데이트 기대하면서 피드 구독합니다.
좋은 하루되세요.
BlogIcon 300.slimes | 2007/03/22 13:02 | PERMALINK | EDIT/DEL | REPLY
아 이런 미천한 글을 구독까지.. 감사합니다. :)
애기가 참 이쁘네요. 건강하게 무럭무럭!
BlogIcon mucha | 2007/05/04 11:53 | PERMALINK | EDIT/DEL | REPLY
좋은 글 잘 읽고 갑니다 :)
BlogIcon 하울 | 2007/05/04 15:49 | PERMALINK | EDIT/DEL | REPLY
와~ 좋은글 잘 읽었습니다. 혹시 순환참조를 했나 다시 확인해봐야겠네요.
제대로된 자바스크립트 책이 나오면 좋겠어요. 앞으로도 좋은글 많이 부탁드려요.
Name
Password
Homepage
Secret
prev"" #1 next