<b>J2ME内存优化</b>[Java编程]
本文“<b>J2ME内存优化</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Out momory 一阵天旋地转内存又溢出了.在手机上这种痛楚常常都有,套一句俗话在手机上用内存必须勒紧裤腰带.
固然目前pc内存上G都不奇特,但是在手机上却只能以K来记,大概某位同志会即刻跳出来说也有上M的,记着中国还不富大大都手机都是低端手机.写手机程序让我仿佛回到了DOS时代(自我安抚一下那个时代也炼出了不少高手说不定我是下一个).言归正传做内存优化可以归结为以下几种办法.代码优化,图片优化,第三方工具优化等…
一.代码优化
内存会溢出必定和代码逃不了关系,99.99%学java的人都知道垃圾回收器是java的一大长处并据此来嘲讽C++.明显这个特点为代码编写者省了不少事,但这个特点却带来了不少隐患.举个例子在游戏当中常常有差别场景的切换,如从游戏逻辑退到主菜单逻辑,对游戏逻辑对象的态度很多人会挑选忘掉等候垃圾回收器来收尸^_^.乍看之下仿佛并没有不当垃圾回收器会来善后.实际上垃圾回收器并非及时的,它不像C++的Delete语句即刻释放不用的内存.当从游戏逻辑切换到主菜单逻辑这时两个对象同时存在极大概这时内存就不够用了.读到这里很多人会发现实际上垃圾回收器在j2me上并不怎么好用,从一个角度上来说在j2me上全部垃圾必须由手工释放,除简单范例以外全部对象都必须显式地置空比方 imgs=null; 实际上java供应了一个不错的工具用来查找内存溢出,java.lang.Runtime.freeMemory() .它可以返回当前的剩余内存数,将它得当的安设在代码中可以有效的监测内存利用情况.
很大一部份的j2me程序员之前都是从事pc软件开辟工作,充盈的内存掩盖了很多写代码的不良习惯.以下所示:
//a 不为空
a=new Logic();
很多人大概对此有异议,他们会认为新的对象会把旧的对象冲掉并且释放内存.这里面包含两个问题:1. 该段代码是先成立对象然后再举行赋值操作的,也就是说在这期间有两个对象同时存在这就极大概会产生溢出.2. 这样做也会阻碍垃圾回收器的工作.
较好的写法以下:
a=null;
a=new Logic();
固然麻烦了点但在j2me中还是必要的.接着看下例.
drawString("游戏时间:" + time ,50,50,Graphics.LEFT|Graphics.TOP);
"游戏时间:" + time 很完善在paint()办法当中每次都被刷一遍显示在屏幕上.危急常常躲藏在漂亮的外表,该语句会惹起新的内存重新分配来存储 "游戏时间:" + time 而显示完今后又必须由垃圾回收器释放,用了双倍时间,并且简单发生内存溢出.依此类推在反复履行的办法里应尽大概避免反复定义对象.与paint()办法近似在循环里也有近似的情形存在.
把全部对象的初始化放在构造函数里想必是再合理不过了,大大都人普通的做法是把当前逻辑所要用到的资源通通初始化完毕.
很大一部份的内存溢出都是发生在构造函数中.内存利用的顶峰期都是在构造函数中所以避开这个顶峰能有效的避免溢出.倡议最好的办法是第一次利用时初始化.以下所示:
if (img==null){
//初始化
}
目前做游戏很多时刻都需求地图数组,声音数组,还有一些别的资源这些资源很多可以放在代码中也有的可以放在文件当中.
激烈倡议将这些资源放在文件中需求时在load进来.这些资源文件假如放在代码中则会占用不小的代码段空间,而代码普通是程序一运行就装载到内存当中.
除上面摆列的办法外还有一些大家所熟知的趁便一提, 比方关闭没用的rms ,关闭没用的网络衔接,关闭没用的流.精确地终止线程.杰出的程序架构削减代码偶合性也是一个不错的办法,无论在代码调式,内存释放都可以做到非常清析.
以上是“<b>J2ME内存优化</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |