更新:
gc仅在最后一个}之后才能工作,这意味着仅在整个for循环完成后,gc垃圾回收才会运行一次。那么,在这里可以使用任何编程模式吗?有点像for循环,但同时也允许gc运行每次迭代。我不知道自己是否可以明确表示...我可以忍受gc运行每次迭代导致的性能下降。
我在一个Android项目上使用了volley,但无法获得有效的解决方案。
基本上,我将收集大量的东西,我将不断发送它们(通过带有volley lib的http)。当我发送10条消息时,这没问题,但是如果我连续发送,它将最终耗尽所有内存,并且由于占用的热量空间,该应用程序将终止。
下面是演示代码块
requestqueue = Common.getQueue();//it will get a normal requestqueue
for (int i = 0; i < waitinglist.size(); i++) {
synccopyreq.filedatas.add(Common.getDataFromWaitinglist(i));
Common.httpPostWithQueue( requestqueue,"tagfullcopy", httpEndPoint+"/sync/fullcopy", gson.toJson(synccopyreq), that, new Common.CallbackInterface() {
@Override
public void completed(String result)
{
Log.i("shawhu","ok done");
}
});
//this was added but it doesn't work unfortunately
//using System.gc() like so was not recommended and most of the time wont'be effective either, I knew that.
System.gc();
}
[请阅读本文,我已经尝试过探查器,当整个过程完成时(例如处理10个项目时),内存使用情况将下降,但是如果我连续运行,则不会。内存使用量持续上升,最终将破坏应用程序(由android系统终止)。如何在循环的每次迭代中释放内存?
请帮助我,谢谢!
没有确定的方法以拥有自己的GC的语言手动释放内存。
但是,您可以使用GC
在Java中请求System.gc()
调用。
请参阅:https://www.geeksforgeeks.org/garbage-collection-java/
注意:虽然我们可以随时随地调用此方法,但是它仍然不能保证垃圾回收会立即运行。
但是我不建议您像这样严重使用GC
,因为每个GC调用都可能会影响主线程的性能