java - 使用 simpleframework 时 Android 模拟器中的垃圾回收过多 (GC_FOR_MALLOC)

标签 java android android-emulator garbage-collection simple-framework

我有一个使用 SimpleFramework 的 Android 应用程序用于 XML 序列化。该应用程序在我测试过的所有真实设备上运行良好,没有任何延迟,但在模拟器上运行时,垃圾收集器会在每次启动该应用程序时运行大约 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 时遇到过这种情况,如果是这样,有什么方法可以防止 GC 在每次启动应用程序(从 eclipse)时启动?增加堆(当前设置为 vm.heapSize=24)会有帮助吗?或者有不同的解决方案吗?

最佳答案

您需要升级到 2.6.7,现在注释处理已经完成,有相当大的变化。事实证明,Android 有一个众所周知的注释问题,奇怪地与糟糕的 java.lang.reflect.Method.equals(Object) 实现有关。 Simple 2.6.7 缓存了更多的注释处理,应该会好得多。

关于java - 使用 simpleframework 时 Android 模拟器中的垃圾回收过多 (GC_FOR_MALLOC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695029/

相关文章:

java - 球是否接触到其中一个 Racket ?

Java:交换对象

android - 如何从命令行设置模拟器像素密度?

java - 主机名无效 - 无法从 Android 模拟器连接 IIS express

Android 模拟器无法启动

ubuntu - 使用 "-no-window"标志时,Android 模拟器永远不会完成启动

java - 未使用的引用变量总是在 Java 中捕获

java - 这是 LinkedList 的正确可视化吗?

android - 如何防止在 Android 平板电脑上安装应用程序?

java - onOptionsItemSelected 发生致命异常