关于垃圾回收
我在做一个游戏时碰到这样的情况,我首先建立httpconnection连接然后回收内存,但是发现内存的使用量始终居高不下,最后查到是在释放内存时调用了多次垃圾回收所致,奇怪的是如果没有建立该http连接即使调用多次垃圾回收也没有这样占用过多内存的问题,不知是否是http连接和垃圾回收在某种程度上有冲突?请高人指点,谢谢! 问题点数:20、回复次数:7Top
1 楼homesos(熊猫贩子)回复于 2005-08-03 10:08:33 得分 3
垃圾回收并不是适时的,更不一定是及时的,特别是在内存使用的高峰期,这非常令人失望。
所以,确实需要清理内存时,可以手动调用System.gc()来处理。Top
2 楼homesos(熊猫贩子)回复于 2005-08-03 10:10:27 得分 2
当然,首先代码要进行优化处理。
然后适时地调用System.gc(),否则,结果会与所期望的相反。Top
3 楼blackprogramming(black)回复于 2005-08-03 10:58:31 得分 0
使用System.gc()但是没有明显的回收效果,我估计是程序中哪里有东西占用了内存,奇怪的是我去掉了所有的图片字符串等比较大的资源仅留下除了变量声明,几乎就是一个空壳但是内存占用量还是在一半以上,有没有什么办法可以查看内存中所存贮的都是哪些东西?
===========
当然,首先代码要进行优化处理。
然后适时地调用System.gc(),否则,结果会与所期望的相反。
关于这点,能否举个例子说明如何优化,何时调用System.gc()效果会不好?谢谢!
Top
4 楼murphy008(菩提老祖)回复于 2005-08-03 11:16:11 得分 5
我现在用J2ME开发,虽然有的时候感觉gc()不错,但是完全指望它还是不行的,偶还是觉得手动清除比较好,所以偶一般都是initGame(),releaseGame().这样比较可靠的!
而且,gc()是单独的线程,多次重复的调用会起到相反的作用哦~~~Top
5 楼murphy008(菩提老祖)回复于 2005-08-03 11:16:59 得分 0
我现在用J2ME开发,虽然有的时候感觉gc()不错,但是完全指望它还是不行的,偶还是觉得手动清除比较好,所以偶一般都是initGame(),releaseGame().这样比较可靠的!
而且,gc()是单独的线程,多次重复的调用会起到相反的作用哦~~~Top
6 楼homesos(熊猫贩子)回复于 2005-08-03 11:16:59 得分 10
优化内存:
◆处理图片大小 调整图片的存储选项 可以用工具进行压缩
◆优化代码,
最大限度的重用对象,
及时置空不再需要的对象(如果不置空,在生成第二个对象之时,很可能会占用双份的空间),
在频繁生成销毁对象的过程中适当调用System.gc()以便及时释放资源(需进行测试找到最佳调用点),
在使用循环时,最好不要采用方法或是经过一系列计算后所得的结果为循环条件,否则,每经过一次循环,都将会调用一次该方法或是经过一系列计算。循环变量如果递增或递减的次数很频繁,最好能采用前置操作符
如果可以用数组替代对象,
字符串就不用说了吧
◆用混淆器进行混淆以减少jar包的大小
Top
7 楼homesos(熊猫贩子)回复于 2005-08-03 11:17:18 得分 0
优化内存:
◆处理图片大小 调整图片的存储选项 可以用工具进行压缩
◆优化代码,
最大限度的重用对象,
及时置空不再需要的对象(如果不置空,在生成第二个对象之时,很可能会占用双份的空间),
在频繁生成销毁对象的过程中适当调用System.gc()以便及时释放资源(需进行测试找到最佳调用点),
在使用循环时,最好不要采用方法或是经过一系列计算后所得的结果为循环条件,否则,每经过一次循环,都将会调用一次该方法或是经过一系列计算。循环变量如果递增或递减的次数很频繁,最好能采用前置操作符
如果可以用数组替代对象,
字符串就不用说了吧
◆用混淆器进行混淆以减少jar包的大小
Top




