XML シリアル化にSimpleFrameworkを使用する Android アプリがあります。アプリは、私がテストしたすべての実際のデバイスで遅延なく正常に動作しますが、エミュレーターで実行すると、アプリを起動するたびにガベージ コレクターが約 3 分間実行されます。
これが私がこれまでに観察したことです:
- オブジェクトを XML にシリアル化する直前にガベージ コレクションが開始される
- これは、最初のオブジェクトがシリアル化されてネットワーク経由で送信される前にのみ発生し、後続の呼び出しでは発生しません。
- シリアライゼーション コードは、パッケージ化され、プロジェクトに .jar ファイルとして追加される別のライブラリにあります。
LogCat からの出力は次のとおりです。
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...
現在シリアル化に使用しているコードは次のとおりです。
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 "";
}
明らかに、コードに変更を加えてアプリを再デプロイするたびに、これには多くの時間がかかります。libaray を使用しているときに他の誰かがこれを経験しましたか? もしそうなら、(Eclipse から) アプリを起動するたびに GC が作動するのを防ぐ方法はありますか? ヒープ (現在は に設定vm.heapSize=24
) を増やすと効果がありますか? それとも別の解決策がありますか?