2013-03-26 2 views
0

런타임 중에 수백 MB의 메모리를 사용하는 Flash 응용 프로그램이 있습니다. 어떻게 든이 메모리를 수동으로 제거 할 수 있습니까? 예를 들어런타임 중에 플래시 메모리 누수가 수정되었습니다.

는 전체 libflashplayer.so에 일부

System.gc() 

를 주입?

+0

앱 메모리 사용량이 더 이상 필요하지 않은 경우 (메모리가 더 이상 필요하지 않을 때) 플래시 플레이어가 가비지 수집을 전혀 제안하지 않습니다. 일반적인 용의자는 이벤트 리스너를 제거하지 않지만 프로파일 러를 통해 앱을 실행하면 더 많은 정보를 얻을 수 있습니다. (예 : adobe scout) –

+0

요점은 내 응용 프로그램이 아니며 소스에 액세스 할 수 없다는 점입니다. 난 그냥 시스템에서 메모리를 제거하는 플래시 라이브러리를 만드는 방법을 찾고 있습니다. – hsz

+0

확인. 그다지 많이 할 수는 없다. System.gc()는 도움을받지 못한다. 가비지 콜렉션이 일찍 일어나는 것이다. 앱이 이미 자체적으로 gc'ing하지 않은 경우 gc()를 호출해도 차이가 없습니다. –

답변

0

GC는 이미 그 자체에 주기적으로 실행 GC가 여유 메모리 않는 경우 이렇게 그러면 Flash 응용 프로그램에 문제가 있습니다.

오브젝트가 더 이상 필요하지 않은 경우에도 GC가 수행되지 않으면 오브젝트가 모든 이벤트 리스너를 릴리스해야하도록 코드를 수동으로 확인해야합니다. 어쩌면 TimerEvent.TIMER 청취자 또는 다른 청취자를 제거하는 것을 잊었을 수 있습니다. 해당 인스턴스를 더 이상 사용하지 않으려는 경우 모든 오브젝트를 참조 해제해야합니다. 여기에는 더 이상 필요하지 않은 객체를 여전히 필요로하는 부모의 표시 목록에서 제거하는 작업이 포함됩니다 (단, 참조 해제 될 것처럼 해당 객체의 표시 목록을 비우지 않아도 표시 목록은 더 이상 유효한 것으로 계산되지 않습니다). 중첩 된 객체에 대한 링크가 너무 많이 수집 될 수 있음),이 객체 및 모든 내용 (weakly referenced counts가 아닌 리스너)에서 추가 할 때 useWeakReference 플래그가 true로 설정되지 않은 모든 리스너를 제거합니다. 유효한 링크로). 기본적으로 어떤 수신기에 어떤 수신기가 연결되어 있는지, 언제 청취자를 추가하거나 제거해야하는지 완전히 제어 할 수 있어야합니다.