文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络网络编程J2EE/J2MEJ2ME内存优
精品推荐
特别推荐
·J2EE Web开发技术期待一次新的技术变革
·J2ME程序开发初学者快速入门的九大要点
·使用技巧:J2ME中程序优化的十个小方法
·RMS从入门到精通之一
·J2EE应用程序中SQL语句的自动构造方法
·解决J2EE系统应用性能问题常用优化项目
·J2EE实用技巧:提升JSP应用程序的绝招
·J2ME内存优
·J2ME简介
·J2EE技术
热点TOP10
·使用Servlet发送电子邮件
·基于MIDP1.0实现通信录
·NetBeans的使用(1)
·配置Eclipse进行远程调试
·J2ME程序开发初学者快速入门的九大要点
·JBoss 文档(三) JBoss和JMS
·JBoss文档(二)??JBoss开发、打包、部署
·经典飞机游戏代码S60
·走进JBoss (1)
·调整压力测试工具

J2ME内存优

日期:2007年5月11日 作者: 查看:[大字体 中字体 小字体]

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.LEFTGraphics.TOP);
"游戏时间:" + time 很完美在paint()方法当中每次都被刷一遍显示在屏幕上。危机往 往隐藏在美丽的外表,该语句会引起新的内存重新分配来存储 "游戏时间:" + time 而 显示完以后又必须由垃圾回收器释放,用了双倍时间,并且容易发生内存溢出。依此类 推在重复执行的方法里应尽量避免重复定义对象。与paint()方法类似在循环里也有类 似的情况存在。 把所有对象的初始化放在构造函数里想必是再正当不过了,大多数人通常的做法是 把当前逻辑所要用到的资源通通初始化完毕。 很大一部份的内存溢出都是发生在构造函数中。内存使用的高峰期都是在构造函数 中所以避开这个高峰能有效的防止溢出。建议最好的办法是第一次使用时初始化。如下 所示:

if (img==null){
//初始化
}

现在做游戏很多时候都需要地图数组,声音数组,还有一些其它资源这些资源很多可以放在代码中也有的可以放在文件当中。

  强烈建议将这些资源放在文件中需要时在load进来。这些资源文件如果放在代码中则会占用不小的代码段空间,而代码一般是程序一运行就装载到内存当中。

  除上面列举的方法外还有一些大家所熟知的顺便一提, 比如关闭没用的rms ,关闭没用的网络连接,关闭没用的流。正确地停止线程。良好的程序架构减少代码偶合性也是一个不错的方法,无论在代码调式,内存释放都可以做到非常清析。


二. 图片优化
  J2ME的内存杀手无疑非图片莫属,一张3k的图片可以占用20多k的内存不信大家把load前后的内存剩余打印出来对比看看。所以防止内存溢出最直接的办法就是从图片入手。

1.图片压缩: 多数人马上会想到这个办法。不错这个办法是最有效的。在photoshop里图片制作完成后不要选择 "存储为",而是选择 "存储为 web 所用格式" 可以根据里面的选项进行压缩,特别是颜色这一项越小越好不过相应的图像会有所失真。不要认为这样就完了。
实际上该图片还可以再次压缩,在网上有许多类似的工具。推荐一款可以压缩png格式的软件 xat.com Image Optimizer 效果不错。经常都有 70% 的压缩率且图像不会失真。

[1] [2] 下一页 



上一篇:J2EE应用中与Oracle数据库的连接(转)

下一篇:J2ME对话-采访KVM之父AT
相关文章:
·0X000000该内存不能为read的解决方法
·一步成高手:终极图解内存(下篇)
·内存不能存为“Read”有这么几种原因
·看内存不能为read written 解决方法
·都是内存插槽惹的祸 内存插槽损坏故障三例
·高手进阶,终极内存技术指南——完整/进阶版
·内存不能为read written解决方法
·判断内存质量的另类方法
·QQ相关技巧:去TIMPlatform 留内存
·系统出现内存错误的解决方法
相关软件:

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot