·推荐栏目: 产业要闻 - 市场分析 - 渠道新闻 - 产品中心 - VAR Partner World - 营销天地
 登录名: 密码: 会员注册 忘记密码
·搜索:
首页 > > 软件 > 开发工具 > 正文
J2ME应用程序内存优化三招

2007年9月23日 MATRIX 李英毅

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 ,关闭没用的网络连接,关闭没用的流。正确地停止线程。良好的程序架构减少代码偶合性也是一个不错的方法,无论在代码调式,内存释放都可以做到非常清析。

【继续下一页 [1] [2]
我对此有兴趣 发表/查看言论打印】 【推荐给朋友
查询与   J2ME  应用程序  优化 有关的新闻
相关文章
最新商情
  在 Java 应用程序中访问USB设备
  金品Mini SAN-优化的桌面网络存储产品
  生产过程优化管理:ERP和MES哪个更可行?
  惠普新解决方案和服务帮助企业优化业务成效
  Blue Coat与神州数码共创WAN优化市
  Blue Coat 携手神州数码共创WAN优
  贵溪铜冶炼厂闪速炉计算机优化控制系统完成初步
  NCR推出全面自助服务解决方案推动分行优化
  NCR推出全面自助服务解决方案推动分行优化
  2007 IBM IT优化论坛在京召开
网站推荐内容
特别推荐_电脑商网
·惠普存储虚拟化结新果·中国“45纳米四核第一单”落·内存仍供过于求 价格上涨只是
·惠普完善B.T.解决方案·浪潮“三驾马车”策略逐鹿互·微软详解“S+S”渠道战略
·戴尔磁盘存储营收达4亿美元 ·AMD和英特尔备战SoC芯片市场·切忌买椟还珠!品牌电脑市场
·惠普:戴尔渠道策略在效仿我·戴尔千店计划启动 灰色渠道盼·TCL电脑并购案的台前幕后:集
·“337调查”指向内存行业·惠普1.175亿美元收购打印机厂·中国IT服务产业现状及发展环
  特别推荐
特别推荐_电脑商网
·
2008中国IT渠道精英颁
·
联合 为何让经销商沦为
·
液晶显示器寒促选购精
·
戴尔发布Studio XPS台
·
企业市场部如何修炼“
·
酷睿i7四核处理器登陆
·
对于电脑外设来说 市场
·
紧急应对寒冬 PC巨头强
·
编辑推荐:2008年三星
·
模式决定出路 创新中求
·
IT卖场与渠道商携手过
·
数字时代的营销战略
·
东芝M321:来自北欧深