论坛首页 移动开发技术论坛

程序里到底需要不需要手动调用System.gc()

浏览 15568 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-25  
system.gc运行级别是最低,一般在多线程编程中,自己手动调用gc,其实一点作用不起,因为处理机根本不给于搭理,除非是空闲时,手动调用了,反而可能会增加虚拟机的负荷。
0 请登录后投票
   发表时间:2009-09-26  
程序运行时,wtk自带的内存monitor中就可以看到自动回收的过程了,完全没必要手动system.gc()。
0 请登录后投票
   发表时间:2009-12-23   最后修改:2009-12-23
如果一个机器,一个对象x
这个机器只能容纳1.99999999个x对象
那么
X x = new X();
在用完x,想重新生成一个new X();
用x = new X();与用x = null;再用x = new X();
就非常有区别了,前者同时存在两个对象,内存爆了。后者不会。
所以用x = null;这个=null;在程序界都有用,都应该用,用都正确,而且用了才算是入了门,才算正确!
gc?用还是不用,不是你凭经验,凭wtk,凭模拟器,凭理论就确定的。
调gc无非是想催jvm回收,这必定消耗资源的,我用真机经验告诉你
Nokia s60 2nd 你催啊,你越催越慢,有时卡不动了!
而moto K1 V600等你不催啊,你不催内存就爆了!你必须常常催,不催就死了。
0 请登录后投票
   发表时间:2009-12-23  
看情况吧。

有时有必要。

试过在游戏中释放资源时,没手动调用System.gc(),在下次导入资源时会内存溢出。手动调用System.gc(),不会出现内存溢出。

在内存溢出时试试手动调用System.gc()吧。也许可以解决。
0 请登录后投票
   发表时间:2009-12-25  
LWUIT的主开发者推荐不要使用gc,而是使用WeakReference来代替,,不过这方面我没做过实验,有人做过使用WeakReference这方面的事吗?有数据的话就好说明了
0 请登录后投票
   发表时间:2010-03-24  
鸟哥说的很到位。
gc原理大家都明白,完全是java描述的那样。
但实际编程中要不要调,什么时候调,取决于程序需求和虚拟机本身实现。
有的机器一次gc调用硬生生对应一次gc过程,完全没有所谓的消息通知。这时候调用越多机器越卡。
也有的机器自动gc性能非常差,以至于不依赖手动gc调用,内存基本得不到回收。
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics