首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>JAVA技术>正文

J2ME应用程序内存优化三招

http://www.oklinux.cn  2008-10-25  ccidnet 天若  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

一.代码优化

内存会溢出肯定和代码逃不了关系,99.99%学java的人都知道垃圾回收器是java的一大优点并据此来嘲笑C 。显然这个特性为代码编写者省了不少事,但这个特性却带来了不少隐患。举个例子在游戏当中经常有不同场景的切换,如从游戏逻辑退到主菜单逻辑,对游戏逻辑对象的态度很多人会选择忘记等待垃圾回收器来收尸。乍看之下似乎并无不妥垃圾回收器会来善后。实际上垃圾回收器并非实时的,它不像C 的Delete语句马上释放不用的内存。当从游戏逻辑切换到主菜单逻辑这时两个对象同时存在很可能这时内存就不够用了。读到这里很多人会发现实际上垃圾回收器在j2me上并不怎么好用,从一个角度上来讲在j2me上所有垃圾必须由手工释放,除简单类型以外所有对象都必须显式地置空例如imgs=null;实际上java提供了一个不错的工具用来查找内存溢出,java.lang.Runtime.freeMemory()。它可以返回当前的剩余内存数,将它适当的安放在代码中可以有效的监测内存使用状况。很大一部份的j2me程序员之前都是从事pc软件开发工作,充裕的内存掩盖了许多写代码的不良习惯。如下所示:

//a不为空

a=newLogic();

很多人可能对此有异议,他们会认为新的对象会把旧的对象冲掉并且释放内存。这里面包含两个问题:1.该段代码是先创建对象然后再进行赋值操作的,也就是说在这期间有两个对象同时存在这就很可能会产生溢出。2.这样做也会妨碍垃圾回收器的工作

较好的写法如下:

a=null;

a=newLogic();

虽然麻烦了点但在j2me中还是必要的。接着看下例。

drawString("游戏时间:" time,50,50,Graphics.LEFT|Graphics.TOP);

"游戏时间:" time很完美在paint()方法当中每次都被刷一遍显示在屏幕上。危机往往隐藏在美丽的外表,该语句会引起新的内存重新分配来存储"游戏时间:" time而显示完以后又必须由垃圾回收器释放,用了双倍时间,并且容易发生内存溢出。依此类推在重复执行的方法里应尽量避免重复定义对象。与paint()方法类似在循环里也有类似的情况存在。

把所有对象的初始化放在构造函数里想必是再正当不过了,大多数人通常的做法是把当前逻辑所要用到的资源通通初始化完毕。

很大一部份的内存溢出都是发生在构造函数中。内存使用的高峰期都是在构造函数中所以避开这个高峰能有效的防止溢出。建议最好的办法是第一次使用时初始化。如下所示

if(img==null){

//初始化

}

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

共2页: 上一页 1 [2] 下一页

上一篇:Java开发中实现DOM文档和XML文件间的转换   下一篇:Linux源代码行数已超过1000万 价值5亿美元

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Java开发中实现DOM文档和XML文件间的转换
·java对String字符串对象的创建以及管理
·Java应用:编写高级JavaScript应用代码
·实例教程:巧用Java 实现个性MSN聊天功能
·在java中产生随机数的两种方式过程详解
·JAVA高手帮你解析XML配置文件的读取操作
·java语言中异常错误恢复处理的异常类型
·使用Java程序连接各种数据库的方法介绍
·JSP动态网站环境搭建应用中详细步骤介绍
·利用Jsvc把Java程序嵌入到Linux服务中去
·在JSP环境中如何来配置和使用fckeditor
·Oracle数据库和JSP连接要注意的一些问题
·新手看招:JSP中表单数据存储的通用方法
·介绍JSP程序动态网站环境搭建的详细步骤
·实例解析:Jsp JavaBean循序渐进教程(一)
·介绍J2EE应用程序的授权概念和解决方案
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Java开发中实现DOM文档和XML文件间的转
·java对String字符串对象的创建以及管理
·Java应用:编写高级JavaScript应用代码
·实例教程:巧用Java 实现个性MSN聊天功
·在java中产生随机数的两种方式过程详解
·JAVA高手帮你解析XML配置文件的读取操
·java语言中异常错误恢复处理的异常类型
·使用Java程序连接各种数据库的方法介绍
·JSP动态网站环境搭建应用中详细步骤介
·利用Jsvc把Java程序嵌入到Linux服务中
·在JSP环境中如何来配置和使用fckeditor
·Oracle数据库和JSP连接要注意的一些问
  阅读排行
·JAVA技术:AJAX jsp无刷新验证码实例
·JSP动态网站环境搭建应用中详细步骤介
·使用prototype.js写的读取RSS的例子
·实例教程:Java Socket编程的一个秘密类
·Java安全:运用加密技术保护Java源代码
·介绍JSP程序动态网站环境搭建的详细步
·J2EE探索者:用JAAS和JSSE实现Java安全
·利用Jsvc把Java程序嵌入到Linux服务中
·进阶教程:编写高级JavaScript应用代码
·在JSP环境中如何来配置和使用fckeditor
·实例教程:巧用Java 实现个性MSN聊天功
·JAVA综合--如何掌握JDK1.5枚举类型
·Oracle数据库和JSP连接要注意的一些问
·JAVA高手帮你解析XML配置文件的读取操
·使用Java程序连接各种数据库的方法介绍
网摘收藏: