1

를 사용하여 나는 XML 직렬화에 대한 SimpleFramework를 사용하는 안드로이드 응용 프로그램을 가지고있다. 응용 프로그램은 lags없이 테스트 한 모든 실제 장치에서 잘 실행되지만 에뮬레이터에서 실행할 때 가비지 수집기가 실행될 때마다 약 3 분 동안 실행됩니다. 여기 과도한 가비지 컬렉션 안드로이드 에뮬레이터에서 (GC_FOR_MALLOC) simpleframework

는 지금까지 관찰 한 내용입니다 :

  • 쓰레기 수집 차기 단지 XML 객체를 직렬화하기 전에
  • 최초의 객체 직렬화 및 네트워크를 통해 전송하고,하지 않는 전에에만 발생 연속적인 통화에 대해 발생합니다.
  • 직렬화 코드는 패키징되어 프로젝트의 .jar 파일로 추가되는 별도의 라이브러리에 있습니다. , 분명히
    public String fromElement(Object request) { 
        Writer writer = new StringWriter(); 
        try { 
         serializer.write(request, writer); 
         String res = writer.toString(); 
         Log.d(LOG_TAG, res); 
         return writer.toString(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
        return ""; 
    } 
    

    , 이것은 많은 시간을 차지 :

    여기
    07-27 08:17:10.275: D/dalvikvm(682): GC_FOR_MALLOC freed 10179 objects/482344 bytes in 32ms 
    07-27 08:17:10.435: D/dalvikvm(682): GC_FOR_MALLOC freed 13927 objects/535968 bytes in 33ms 
    ....... About 300 more similar entries... 
    

    내가 현재 직렬화 사용하고 코드입니다 : 여기

는 로그 캣의 출력입니다 코드를 변경하고 앱을 다시 배포 할 때마다 다른 사람이 libaray를 사용할 때 이것을 경험 했습니까? 그렇다면, (실행으로부터) app을 실행할 때마다 GC가 실행되는 것을 막을 수있는 방법이 있습니까? 힙 (현재 vm.heapSize=24으로 설정)을 늘리면 도움이 될까요? 아니면 다른 해결책이 있습니까?

답변

1

당신은 2.6.7로 업그레이드해야을, 이제 주석 처리가 수행되는 꽤 큰 변화가있다. Android는 잘못된 java.lang.reflect.Method.equals (Object) 구현과 관련하여 이상하게도 주석에 대한 문제를 잘 알고 있습니다. Simple 2.6.7은 훨씬 더 많은 주석 처리를 캐시하고 훨씬 더 좋아야합니다.

+0

새 버전 (2.6.9)으로 업그레이드하면 문제가 해결 된 것 같습니다. – Jeshurun

0

이 어둠 속에서 기회입니다,하지만 당신은 초기 JVM 힙 크기를 변경 봤어? 그것은 -xms 매개 변수입니다. 에뮬레이터에서 너무 낮아서 처음 몇 분 동안 끊임없이 크기를 조정하고 가비지 수집을 시도하려고합니다. 이 링크를 체크 아웃 : http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp

+0

좋은 점은 일식 힙 크기와 동일합니까? 이클립스 힙은 충분히 크다 :'-XX : MaxPermSize = 1G -Xms1G -Xmx2G'. AVD 매니저 나 다른 곳에서 에뮬레이터를 위해 특별히 설정할 수있는 곳이 있습니까? 감사. – Jeshurun

관련 문제