2013-03-30 5 views
1

Android 애플리케이션 프로젝트의 간단한 예입니다 (Eclipse에서 사용). 코드 샘플의 차이점과 메모리 스냅 샷 사진의 차이점을 확인하십시오. com.google.gson.Gson.toJson을 호출하면 메모리 누수가 발생합니다. 샘플 1 (라인 printObject가 주석 호출)Android 및 Gson 메모리 누수

public class MainActivity extends Activity 
{ 
... 
@Override protected void onRestoreInstanceState(Bundle savedInstanceState) 
{ 
    // Log.v(TAG, ">>> ACTIVITY [onRestoreInstanceState] config:"+printObject(savedInstanceState)); 
    super.onRestoreInstanceState(savedInstanceState); 
} 
public String printObject(Object object) 
{ 
    try { return new Gson().toJson(object); } 
    catch (Throwable ex){return "[FAILED to PRINT Object] : "+ex.getMessage();} 
} 
} 

샘플 2 (주석 로그 제외한 1 짧은 동일한 코드를 .... 라인 그래서 printObjet에 호출.)

... 
@Override protected void onRestoreInstanceState(Bundle savedInstanceState) 
{ 
    Log.v(TAG, ">>> ACTIVITY [onRestoreInstanceState] config:"+printObject(savedInstanceState)); 
    super.onRestoreInstanceState(savedInstanceState); 
} 

For Sample 1:

,174 : 여기 활동을 다시 시작 야기 태블릿 회전 기기 (각각의 경우에 대해) 이클립스 메모리 분석기는 샘플 1 및 2 각각 스냅 (62) 후의 시간이다

For Sample 2:

51,515,둘째 화상의 녹색 영역은 "누설 용의자"

문제점 의심 달빅 "로드"com.example.leaktest.MainActivity "3 개

62 인스턴스. system.PathClassLoader @ 0x416beb30 "은 1,959,008 (24.72 %) 바이트를 차지합니다.

테스트에 사용 : 이클립스 4.2/GSON 2.2.2 (2.1)/안드로이드 4.2/안드로이드 태블릿과 그물에서 일부 유사한 문제가 있습니다 4.1.1

: hereand here

질문 : Android 또는 Gson에서 문제입니까? 또는 나는 수업을 놓쳤다 :)?

답변

0

문제는이며 Gson과 관련이 없습니다. Android Developers '블로그에 this post을 포함하여 활동 누출을 피하는 방법에 대한 정보가 많이 있습니다.

+0

주의해서 읽으십시오. 샘플 1에는 누출이 없습니다. 동일한 테스트 조건. 동일한 코드 샘플을 직접 테스트하고 다른 결과를 얻는 경우 다른 거래가 발생합니다. 하지만 나는 의심 스럽다. –

+0

그건 그렇고 나는 Gson과 관련 있다고 확신합니다. 메모리 분석기에서 누출이 Gson의 NN 인스턴스로 의심되는 코드의 또 다른 덩어리에서 문제의 근원이 시작 되었기 때문입니다. –

+0

위의 코드는 Android App 프로젝트 템플릿에 추가 된 유일한 코드입니다. 그래서 당신이 보는 것은 나쁜 일들이 일어날 수있는 유일한 곳입니다. 당신의 의견에 내가 실수 한 곳을 가리킬 수 있습니까? –