Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 等待并发GC被阻止_Android_Eclipse_Garbage Collection - Fatal编程技术网

Android 等待并发GC被阻止

Android 等待并发GC被阻止,android,eclipse,garbage-collection,Android,Eclipse,Garbage Collection,当我在emulator上运行应用程序时,Logcat显示: 04-22 16:21:30.685: D/dalvikvm(967): GC_CONCURRENT freed 1545K, 20% free 7019K/8720K, paused 78ms+17ms, total 360ms 04-22 16:21:30.685: D/dalvikvm(967): WAIT_FOR_CONCURRENT_GC blocked 143ms 04-22 16:21:31.845: D/dalvikv

当我在emulator上运行应用程序时,Logcat显示:

04-22 16:21:30.685: D/dalvikvm(967): GC_CONCURRENT freed 1545K, 20% free 7019K/8720K, paused 78ms+17ms, total 360ms

04-22 16:21:30.685: D/dalvikvm(967): WAIT_FOR_CONCURRENT_GC blocked 143ms
04-22 16:21:31.845: D/dalvikvm(967): GC_CONCURRENT freed 1552K, 20% free 7019K/8720K, paused 116ms+18ms, total 554ms

04-22 16:21:31.845: D/dalvikvm(967): WAIT_FOR_CONCURRENT_GC blocked 268ms
04-22 16:21:32.435: D/dalvikvm(967): GC_CONCURRENT freed 1545K, 20% free 7019K/8720K, paused 75ms+9ms, total 192ms

04-22 16:21:32.435: D/dalvikvm(967): WAIT_FOR_CONCURRENT_GC blocked 73ms
04-22 16:21:32.945: D/dalvikvm(967): GC_CONCURRENT freed 1552K, 20% free 7019K/8720K, paused 75ms+10ms, total 209ms

04-22 16:21:32.945: D/dalvikvm(967): WAIT_FOR_CONCURRENT_GC blocked 70ms
04-22 16:21:33.434: D/dalvikvm(967): GC_CONCURRENT freed 1545K, 20% free 7019K/8720K, paused 78ms+12ms, total 192ms

这会一直持续到我退出应用程序。有什么建议吗?谢谢这意味着你做了太多的操作,占用了大量内存。因此,正在调用GC(垃圾收集器)以释放内存

4-22 16:21:30.685:D/dalvikvm(967):总重量1545K,20% 自由7019K/8720K,暂停78ms+17ms,总计360ms

freed表示释放了多少内存

当堆变得太大而无法防止溢出时,将调用GC_CONCURRENT

暂停78ms+17ms–表示GC完成收集所用的时间


另外,使用MAT工具获取内存转储并分析转储

看起来您正在创建许多新对象,并很快将它们扔掉

要获取WAIT_For_CONCURRENT_GC,请参见以下内容:

这意味着您试图分配内存(例如对象创建),但内存不适合。这就是GC_并发释放的原因。这只是一般的垃圾收集


如果您遇到性能问题,请尝试重用对象或备用对象。

大多数人同意@luxer,但我相信这不是因为您分配了太多对象,而是因为您分配了一些大型对象。如果您参考@luxer指向的关于WAIT_FOR_CONCURRENT_GC的链接,您将意识到在您的应用程序中正在触发第二个GC,而并发GC(通常在堆占用率达到软限制时触发)正在进行中。第二个gc可能是由您显式触发的,或者是因为分配失败。由于您没有表示您正在调用System.gc(),因此我假设您的分配失败,并且系统正在尝试执行gc


是的,你应该认真考虑重新使用一些巨大的物体,而不是每次分配它们。这是一种更好的做法,但如果由于某种原因您无法做到这一点,您可能会增加堆大小(通过设置大堆),这可能会有所帮助。

有时,当您有一个永无止境的循环时,仅仅因为某些条件总是正确的


试着弄清楚这种情况是否首先发生,因为它的发生主要是因为这个原因。

我通过调试代码解决了我的问题:在无限while循环中潜伏着一个DB操作,它正在填充bean,从而导致内存泄漏

如果你是像我这样的新手,请检查while/do-while/for循环和循环中完成的对象分配。 未关闭的连接和游标也应关闭

谢谢