'gc'에 해당되는 글 1건

  1. 2008/06/16 Flex/Flash의 GC에 관하여.. (5)
flex나 flash를 다루다 보면 참 알다가도 모를것이 GC입니다..
하지만 전  절대적으로 플래시 플레이어의 GC를 믿는편입니다.

프로젝트를 진행하다 메모리가 FULL이 나는 상황을 만나보지 못했으니 하는 말 일수도 있습니다.
하지만 개발당시 메모리와 CPU를 보며 개발을 하는편입니다.

fps와 System.totalMemory를 찍어서 메모리를 보면서 하는것이 대부분이지만요.
아시는 분들이 꽤 많으실꺼라 생각이 되는데.
System.gc()에 관한 겁니다.

이놈이 debug mode에서만 작동한다는거겠죠..
그런데 온라인 상에서 강제 GC를 일으킬수 있습니다..

try{
     new LocalConnection().connect('foo');
     new LocalConnection().connect('foo');
}catch(e:Error(){}

플래시 플레이어의 버그로 저렇게 localconnetion을 2번 맺으면 GC가 발생하게 됩니다.

간단하게 Class의 Util로 빼본다면 이렇게 되겠죠..

package net.asjs.utils
{
 import flash.net.LocalConnection;
 
 public class GCManager{
 
  public function GCManager() {}
 
  public static function gc():void
  {   
   try
   {
    new LocalConnection().connect('foo');
    new LocalConnection().connect('foo');
   }catch (e:Error){
   
   }  
  }
 }
}

하지만 이렇게 해준다고 능사가 아닙니다.
흔히들 addEventListener("type",method);만 적고 끝내는 경우가 많죠..
하지만 리스너가 GC대상이 되려면 이런 코딩을 생활화 해야만 합니다.

addEventListener("type",method,false,0,true); 약한 참조의 활성화..

그리고 지양해야만 하는 코드가 있습니다.

addEventListener("type",function(evt:Event):void{
    //로직
});

이렇게 동적 method를 넣어 버리면 저렇게 추가된 이벤트는 참조가 불가능해져서 지울수가 없습니다.
EventManager같은걸 만들어서 관리하는 것도 좋지요..

이외에도 bitmap을 활용하는 것도 좋고 loader를 재활용하는 것도 도움이 됩니다. loader가 불러온 데이터를
재 활용하는 것도 좋은 사용법이 될겁니다.

그리고 중요한 것중에 하나는 이미 받은건 다시 받지 말자입니다.
또한 많이 받아야 하는데 그 많이 받은것이 보여지지 않는 다면 받지 말자입니다.
물론 미리 받아놔야 이벤트가 더 자연스럽고 화려할수는 있습니다만 네크웤을 생각하고 자원을 생각한다면
보여지지 않는 것은 미리 받지 않는것이 커다란 도움을 줍니다. 사이트 로딩속도에도 지대한 영향을 미치죠.
스크립트 몇줄 줄이는 것보다 이미지 하나 덜 부르는것이 10배는 더 효과적 일수 있습니다.

GC이야기 하다 최적화하는 방향으로 이야기가 빠졌네요.
아무튼 아껴야 합니다.그리고 수단 과 방법은 최대한 활용해야 합니다.
그래야 잘 살수 있습니다 :)

참 걱정입니다..
요즘 제 심정은 영어로 하자면... I don't know what i want
무엇을 원하는지 알수가 없네요...제게도 메모리풀 현상이 발생한듯 합니다..
제게도 gc가 필요할때 같습니다..언제 gc가 일어날지 모르겠지만...기다려 보렵니다.
크리에이티브 커먼즈 라이선스
Creative Commons License

'FLEX' 카테고리의 다른 글

FLEX에서 Label에 StyleSheet 지정하기  (4) 2008/07/01
Flex에서 NavtiveWindow에 addChld하기...  (4) 2008/06/20
FLEX나 Flash의 Textarea 에서 TextField 접근하기  (4) 2008/06/19
Flex/Flash의 GC에 관하여..  (5) 2008/06/16
[Flex]Flex2StyleExplorer  (0) 2008/02/26
AIR/Flex3 정식 Release...  (2) 2008/02/26
[flex3]Flex3 Component Explorer  (0) 2008/02/26
RSLs..  (0) 2008/02/22

Trackback Address :: http://lovedev.tistory.com/trackback/250

댓글을 달아 주세요

  1. 검쉰 2008/06/17 15:12 Address Modify/Delete Reply

    몇일전에 타이머에서 메모리릭이 발생한다는 글을 읽은 적이 있습니다. 그 포스트롤 보고 Flex3 에 있는 메모리 프로파일러로 테스트해봤습니다.
    타이머에게 이벤트리스너를 설정할때 addEventListener("type",method); 이렇게 강한 참조로 해도, 약한 참조로 일부러 설정해도 프로파일러에서는 일정시간이 지난후 GC 가 되더군요..
    디버그용 파일이라서 그런가... ㅡㅡa

    • ActionDev 2008/06/17 15:40 Address Modify/Delete

      약한 참조가 힘을 발휘할때는 element가 root로부터 끊어을 때 상황에서 힘을 발휘하게 될겁니다.
      element는 remove되었고 null되었는데 eventListener는 remove하지 않았다면 이럴 경우 GC가 안될수 있는 부분도 GC가 됩니다. 근데 GC가 된다고 하는데도 완전 100%된다라고 확신지어 말할수 밖어 없는 기분.. 캬..
      그래도 FP의 GC는 믿을만 한거 같아요..그냥 믿기로 했습니다. AVM을 뜯어 볼수도 없으니..음..

    • 검쉰 2008/06/17 18:26 Address Modify/Delete

      속을 못보니 그냥 하라는데로 해야겠네요 ;)

  2. 칡흙 2008/08/04 09:24 Address Modify/Delete Reply

    localconnection을 호출하는 방법을 사용할 경우 이후 버젼에서는 적용되지 않을 수 있고 합니다.
    되도록 사용하지 말라고 하던데요.

    ㅇ_ㅇ.... 머... 이후 버젼에서는 관리하는 함수가 별도로 나오겠져머....

    • ActionDev 2008/08/04 13:51 Address Modify/Delete

      :) 안녕하세요
      그러게요..이건 거의 편법이죠 :)
      다음 버전에는 gc도 들어 가지 않을까 생각해 봅니다..
      3d까지 지원해주려면 gc도 확실히 해주겠죠 :)
      좋은 하루 되세요!