2012-07-11 2 views
0

나는 안드로이드 응용 프로그램에서 메모리 문제가 발생했습니다. 활동에 선언 된 많은 개인 및 공개 정적 변수가 있습니다.활동을 마치면 모든 객체가 제거됩니다.

활동 ID가 완료되면 이러한 개인 및 공용 객체가 지워졌는지 (메모리) 또는 onDestroy()에있는 null에 할당하여 null을 수동으로 만들어야하는지 알고 싶습니다. 이 방법이 올바른지 아니면 조언을 구하십시오. 또한 onDestroy()에 수동으로 가비지 수집기를 호출합니다. 수동으로 System.gc를 호출하는 올바른 방법입니까?

도와주세요.

+0

활동에서 선언하는 변수는 특정 활동에만 해당됩니다. 가비지 수집기를 호출하여 메모리를 지울 필요가 없습니다. – AkashG

+0

좋습니다. 그럼 마무리가 호출되면 그 안에있는 모든 객체가 지워지고 메모리가 해제됩니다. 맞습니까? – Arun

+0

예 ... 제가 특정 활동에 접근 할 수 있다고 말한 것을보십시오. 당신이 그들을 파괴하지 않는다면 아무런 문제가 없습니다.하지만 그렇게하고 싶다면, onDestroy에서 활동을하지 않을 때 null로 만드십시오. – AkashG

답변

0
  1. 개체에 참조가 없으면 null로 선언 할 수 있습니다. 수동 GC CAL 경우

    1. 당신은 당신이 가비지 컬렉션의 보증을 제공하지 않습니다 ADB 쉘

    2. 내부 dumpsys meminfo 파일 (PID) 명령을 사용하여 메모리 정보를 확인할 수 있습니다

+0

확인. 따라서 변수를 공개적으로 선언 할 때 null 값을 지정하도록 조언합니다. 권리 ? – Arun

+0

예, 또한 객체가 작업을 마치면 ondestroy에서 null로 선언 할 수 있습니다. –

+0

이렇게하면 메모리가 해제됩니다. 또한 이렇게하는 것이 좋은 방법입니다. – Arun

0

일반적으로 가비지 수집을 강제로 수행하는 것은 바람직하지 않습니다 (시스템에 두십시오). 가상 메모리 효과를 무시하면 회수해야 할 쓰레기가 많을 때 가비지 수집이 가장 효율적으로 작동합니다. 즉 할당자가 즉시 사용 가능한 빈 메모리를 모두 소모 할 때. 다른 시간에 가비지 컬렉터를 강제 실행하면 더 많은 시간을 (평균적으로) 수집합니다.

system.gc()를 암시 적으로 가비지 수집으로 호출 할 수 있지만 Java의 가비지 수집기는 비 결정적입니다. 그래서 당신은 그것이 즉시 모든 메모리를 무료로 추측 할 수 없다.

Ref. 링크 >>link

관련 문제