【问题标题】:Java/Android : Phonegap Contacts API memory leaks, GC_FOR_ALLOC and GC_CONCURRENTJava/Android:Phonegap Contacts API 内存泄漏、GC_FOR_ALLOC 和 GC_CONCURRENT
【发布时间】:2023-04-11 09:58:02
【问题描述】:

我正在将 phonegap 用于一个项目,并且有一次我需要获取用户的整个地址簿。它在 iOS 上运行良好,但在 android 上,有时需要 2 秒,有时长达 20 秒。

当花费这么多时间时,我会收到很多 GC_CONCURRENTGC_FOR_ALLOC LogCat 消息。

05-07 18:01:40.869: D/dalvikvm(17847): GC_CONCURRENT freed 379K, 16% free 9756K/11527K, paused 24ms+23ms, total 97ms
05-07 18:01:42.650: D/dalvikvm(17847): GC_CONCURRENT freed 288K, 15% free 9865K/11527K, paused 30ms+21ms, total 98ms
05-07 18:01:44.132: D/dalvikvm(17847): GC_CONCURRENT freed 292K, 14% free 9972K/11527K, paused 26ms+22ms, total 114ms
05-07 18:01:46.064: D/dalvikvm(17847): GC_CONCURRENT freed 276K, 13% free 10121K/11591K, paused 24ms+14ms, total 116ms
05-07 18:01:47.425: D/dalvikvm(17847): GC_CONCURRENT freed 246K, 13% free 10273K/11719K, paused 13ms+12ms, total 65ms
05-07 18:01:49.197: D/dalvikvm(17847): GC_CONCURRENT freed 335K, 13% free 10368K/11911K, paused 14ms+16ms, total 72ms
05-07 18:01:50.638: D/dalvikvm(17847): GC_FOR_ALLOC freed 83K, 14% free 10405K/11975K, paused 32ms, total 32ms
05-07 18:01:51.329: D/dalvikvm(17847): GC_FOR_ALLOC freed 68K, 14% free 10438K/12103K, paused 37ms, total 37ms
05-07 18:01:51.329: I/dalvikvm-heap(17847): Grow heap (frag case) to 11.436MB for 130826-byte allocation
05-07 18:01:51.379: D/dalvikvm(17847): GC_FOR_ALLOC freed 0K, 14% free 10566K/12231K, paused 49ms, total 49ms
05-07 18:01:52.480: D/dalvikvm(17847): GC_FOR_ALLOC freed 105K, 15% free 10487K/12231K, paused 34ms, total 34ms
05-07 18:01:52.490: I/dalvikvm-heap(17847): Grow heap (frag case) to 11.545MB for 196234-byte allocation
05-07 18:01:52.520: D/dalvikvm(17847): GC_FOR_ALLOC freed 127K, 16% free 10551K/12423K, paused 36ms, total 36ms
05-07 18:01:55.303: D/dalvikvm(17847): GC_FOR_ALLOC freed 233K, 15% free 10658K/12423K, paused 33ms, total 33ms
05-07 18:01:55.363: D/dalvikvm(17847): GC_FOR_ALLOC freed 1039K, 21% free 9837K/12423K, paused 36ms, total 36ms

我查了一下,发现它与内存释放有关。不幸的是,这不取决于我的代码。生成所有这些消息的代码是cordova 框架的一部分。

现在有什么方法可以加快联系人获取速度,或者避免那些“内存泄漏”?

cordova 项目是开源的,所以这里是他们的 github 的链接:

https://github.com/apache/cordova-android/tree/master/framework/src/org/apache/cordova

虽然这对我来说太重了。我在 Java 方面不够好,不知道我可以做些什么来避免这些内存问题。

也许我对此无能为力。

还是谢谢你!

【问题讨论】:

  • 仅供参考:这不是内存泄漏,它只是进行垃圾收集的 dalvik vm。
  • @TobiasMoeThorstensen 是的,我不确定这个名字。有没有办法最小化这种垃圾收集?我无法拥有一个需要 20 秒才能检索联系人的应用。
  • 请查看我的帖子,如果您对答案发表评论,我将根据您的反馈进行更新。

标签: java android performance cordova memory


【解决方案1】:

我遇到了一些关于内存泄漏的问题。如果您使用的是 Eclipse,您可以使用Memory Analyzer Tool 分析问题。这对你会有很大帮助。请参阅此post,其中包含大量有关内存处理的信息。

只是一个简短的旁注;不熟悉phonegap库,但是你是在一个线程中做这个操作吗?如果没有,我可能也会尝试。

【讨论】:

  • 我完全不知道它是否在线程中完成。 Phonegap 允许开发人员仅使用 javascript 调用设备的本机功能。我从 JS 调用联系人 API,但是,我真的不知道会发生什么。我发布了他们的 github 的地址,我可以查看它,但我是 Java 的新手。谢谢你的内存分析器工具。我将使用它,我会及时通知您。
  • 我试图理解 MAT,但我在这里游泳。我试图得到一个 head dump,但它只显示了三个进程,一个是 MAT,一个是 Eclipse,一个是 jsp。所以我从 eclipse 中甩了,但我真的不知道什么时候应该这样做。我在联系人获取期间做了,然后,但我不知道我是否应该这样做?
  • 另外它看起来像是在一个线程中完成的:this.cordova.getThreadPool().execute(new Runnable() { public void run() { JSONArray res = contactAccessor.search(filter, options) ; callbackContext.success(res); } });
猜你喜欢
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 2015-08-14
  • 2012-08-11
相关资源
最近更新 更多