【发布时间】:2015-04-09 07:48:45
【问题描述】:
我正在开发一个实时应用程序。为了解决非线性优化问题,我集成了 Java 求解器 jcobyla (https://github.com/cureos/jcobyla)。每次求解器运行时,垃圾收集器都会在大量运行时进行大量工作:
02-09 12:58:16.822: V/onCreate(7061): maxMemory:512524288k
02-09 13:04:23.127: D/dalvikvm(7061): GC_FOR_ALLOC freed 10314K, 40% free 17304K/28544K, paused 16ms, total 16ms
02-09 13:04:23.177: D/dalvikvm(7061): GC_FOR_ALLOC freed 3437K, 34% free 17304K/26196K, paused 11ms, total 11ms
02-09 13:04:23.222: D/dalvikvm(7061): GC_FOR_ALLOC freed 3437K, 34% free 17304K/26196K, paused 10ms, total 10ms
02-09 13:04:23.322: D/dalvikvm(7061): GC_FOR_ALLOC freed 10304K, 33% free 17303K/25452K, paused 18ms, total 18ms
>02-09 13:04:23.367: D/dalvikvm(7061): GC_FOR_ALLOC freed 3437K, 33% free 17303K/25452K, paused 11ms, total 11ms
02-09 13:04:23.417: D/dalvikvm(7061): GC_FOR_ALLOC freed 3437K, 33% free 17303K/25452K, paused 12ms, total 12ms
02-09 13:04:23.522: D/dalvikvm(7061): GC_FOR_ALLOC freed 10304K, 40% free 17304K/28540K, paused 16ms, total 17ms
02-09 13:04:23.567: D/dalvikvm(7061): GC_FOR_ALLOC freed 3437K, 34% free 17304K/26196K, paused 11ms, total 11ms
02-09 13:04:23.612: D/dalvikvm(7061): GC_FOR_ALLOC freed 3437K, 34% free 17304K/26196K, paused 11ms, total 11ms
我尝试了很多方法来阻止 GC 运行。相信求解器达到了我使用的应用程序的最大堆限制android:largeHeap="true"。在单独的进程中运行求解器也没有解决问题。
正如您在上面的 LogTag 中看到的,应用程序的最大堆限制约为 512MB,这对于 jcobyla 来说绰绰有余(大约需要 300MB)。运行后 GC 告诉我有 34% 的空闲空间为 24.85 MB。运行 jcobyla 时应用程序的总 RAM 使用量约为 20 MB。
为什么 GC 显示的限制与应用的最大堆限制不同?
如何增加求解器可能的内存使用量?
如何防止 GC 运行?
【问题讨论】:
标签: android memory-leaks garbage-collection