J2ME内存优化

今天在优快云上浏览帖子,忽然发现一篇询问内存溢出的解决办法的帖子,有感而发写了这篇文。
      我想做过J2ME的人,特别是像我这样做手机游戏的,肯定会对OutOfMemoryError这个异常深恶痛绝,尤其是在老40这样变态的机型上,甚至对这个异常都产生了恐惧。还好我现在总算不做这个机型了,对那些仍然在为这个机型移植游戏的同志们感到同情。为了能够稍微缓解一下他们的痛苦,也为了广大J2ME的从业者和爱好者能尽量减少与该异常的见面次数,CoCoMo将把自己的经验分享一下。
     
  首先了解一下分析内存占用的方法,一般有两种:模拟器自带工具和Runtime类方法。
 
  模拟器自带工具:WTK貌似带了一个Memory Monitor,而且许多学者人士也夸夸其谈他的使用方法,但我不知道有多少人真正在用。就我对他的了解,首先运行他你的程序会慢的一塌糊涂,这对游戏开发者来说简直是无法忍受的。但我出于研究目的仍然让他跑了半个小时才发现原来他根本无法显示正确的内存占用量,我载入一张很大的图片后他的内存线好像只出现了微微的波动又停留在原位,呵,看来的确是拿出来秀的。我一般使用的是7210模拟器自带的内存监视器,模拟的很准,但唯一的缺点是内存太少,才200K。我也见某些人使用3220的模拟器监视内存,好像内存稍微大一点,我还没来得及尝试就再也不用为老40写程序了,庆幸。
  Runtime类方法:我经常用这个语句System.out.println(Runtime.getRuntime().freeMemory());后来集成进了我的引擎,他能够显示当前剩余内存。不记得有多少次我用它在老40上来寻找内存占用峰值。
     
      了解了分析内存的方法,来看看内存占用的罪魁祸首:程序和资源。
      程序:类会被编译成class字节码文件随MIDlet的启动加载进内存,而且是一次性全部加入。也就是说MIDlet里类个数越多、单个类程序越长、类内字符串常量及数据越多,编译后的class文件就越大,载入后占用的内存也越多。我经常在MIDlet类的构造函数里用Runtime方法来查看MIDlet启动后整个程序占用内存量。
      优化方法:
      1.某些同志将MIDlet程序写成两个类来减少内存占用量,但是以牺牲Java的OOP特性为代价的。在程序比较大时这种弊端将尤为显见。而且CoCoMo曾经遇到过单个类过大,载入时间过长而违反百宝箱有关Logo 6秒时间限制的情形。因而我现在的程序加带引擎一般都是6-7个类。
      2.尽量编写优雅的代码,减少函数数量,在程序发布时去掉try catch,最大限度的减少程序行数,这一般都是在老40上没有办法的办法,现在CoCoMo已经不靠这个来省内存了。
      3.将数据及字符串写进文件,在用时方载入内存,不用时设为null。

JAVA手机网[www.cnjm.net]

      4.I/O操作getClass().getResourceAsStream(file);、数据库操做RecordStore.openRecordStore(name, true);、声音创建Manager.createPlayer();、图像创建Image.createImage(file);会在短时间内占用大量内存且过后释放,如果MIDlet程序内存剩余量不足则会在这些函数频繁调用时发生内存溢出,产生所谓的内存峰值,尤其在老40上比较普遍。
当你再次与讨厌的OutOfMemoryError碰面时,多用Runtime查找内存峰值发生位置并尽量将这些语句分开调用,并灵活运用System.gc()来及时回收。
     资源:
        图片:是占用内存的大户,尤其是手机游戏图片资源众多。对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中的占用量:
      内存占用量=宽*高*像素字节数,其中像素字节数因机型而异。
      例如一张64*64的图片在7210上的内存占用量=64*64*1.5=6144(字节)=6K、在S60上的内存占用量=64*64*2=8192(字节)=8K。像素字节数因机型而异,例如7210是4096色机型,也就是说用12位来表示一个像素,所以乘上1.5,而S60是65536色的机型,用16位来表示一个像素,所以乘上2。
      优化方法:

JAVA手机网[www.cnjm.net]

      有些人认为压缩图片可以节省内存,这种想法是错误的。根据上面的解释图片载入内存后只和宽高有关系,和图片数据量大小没有任何关系,压缩图片只能减少jar大小而不能减少内存占用量。
      1.静态法:减小图片大小,宽高小了结果当然小了。根据这个思路出现了动画编辑器之类的工具,像gameloft的波斯王子,人物被分割后使人体的部位可以重用,各部位紧凑放置都是为了较少图片大小,充分利用图片中的每一寸空间。
      2.动态法:减少同一时刻载入内存的图片数。CoCoMo曾经在火影武士项目中遇到过这种情况,当时有6种怪物,如果同时载入内存在老40上肯定爆掉了,但是每关只出现两到三种怪物,所以每一关只需要载入该关出现的怪物图片即可。现在想起来当时做这个项目在老40上溢出频出,真把我搞死了。
      声音:声音也是比较耗用内存的资源,声音中音轨所占的byte会转化成字节流被载入到内存中。因而减少音轨所占byte即可减少内存耗用量。目前gameloft的做法是用声音转化工具将mid转化为ott,然后变为ByteArrayInputStream字节流来创建Player

Cadence PSpice 仿真0:绘制电路图方法图文教程 在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。 阅读详情

相关推荐

SpringBoot+Vue前后端分离项目实战:个人博客系统

MyBlog主要是基于 SpringBoot + Vue 前后端分离开发的一款动态个人博客系统,后台和前台均通过JSON数据做交互,主要功能有文章管理、分类管理、标签管理、附件管理、评论管理、友链管理、个人资料/博客信息管理等。

Myles'Blog 1万+

J2ME 内存占用的问题

今天在优快云上浏览帖子,忽然发现一篇询问内存溢出的解决办法的帖子,有感而发写了这篇文。       我想做过J2ME的人,特别是像我这样做手机游戏的,肯定会对OutOfMemoryError这个异常深恶痛绝,尤其是在老40这样变态的机型上,甚至对这个异常都产生了恐惧。还好我现在总算不做这个机型了,对那些仍然在为这个机型移植游戏的同志们感到同情。为了能够稍微缓解一下他们的痛苦,也为了广大J2ME的

十一郎的IT博客 1074

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1902

J2ME内存占用详解及优化方法

(本文摘自互联网) 我想做过J2ME的人,特别是像我这样做手机游戏的,肯定会对OutOfMemoryError这个异常深恶痛绝,尤其是在老40这样变态的机型上,甚至对这个异常都产生了恐惧。 首先了解一下分析内存占用的方法,一般有两种:模拟器自带工具和Runtime类方法。 模拟器自带工具:WTK貌似带了一个Memory Monitor,而且许多学者人士也夸夸其谈他的使用方法,但我不知道有...

yuanlanjun 223

[AbutionGraph] 报表制作-使用Grafana动态可视化知识图谱指标

使用开源报表可视化工具Grafana实时监控时序知识图谱数据仓库AbutionGraph中的数据,实时性报表查询, 满足单次百万千万级的数据查询,毫秒级查询延迟,亚秒级对千亿数据量汇总统计,每日过亿报表查询/多维分析/日志分析等数据指标...

图特摩斯科技-博客 4278

金仓数据库KCM认证考试介绍【2025年4月更新】

金仓数据库认证资深专家KCM认证考试介绍

qq709869231的博客 3227

J2ME内存优化 【转】+ 补充

原文 http://www.3geye.net/?3/viewspace-3215转自:http://www.blogjava.net/gooogle/archive/2008/04/01/189914.htmlout momory 一阵天旋地转内存又溢出了。在手机上这种痛苦经常都有,套一句俗话在手机上用内存必须勒紧裤腰带。虽然现在pc内存上G都不奇怪,可是在手机上却只能以K 来记,可能某

713

vuecil3+版本下,兼容ie等不支持es6的低版本浏览器

*综上,完成兼容性涉及到的配置的文件有,对应在页面中查看代码,就不单独附代码了:main.js。

yhr0322的博客 833

j2me内存优化

 首先申明本文章由J2MEGAME.ORG转载而来,原因很简单,这篇文章真的是太好了,我情不自禁想和大家分 享!!! 正文如下: out memory 一阵天旋地转内存又溢出了。在手机上这种痛苦经常都有,套一句俗话在手机上用内存必须勒紧裤腰带。虽然现在pc内存上G都不奇怪,可是在手机上却只能以K 来记,可能某位同志会马上跳出来说也有上M的,记住中国还不富大多数手机都是低

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 1207

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件详述(ArkSIM集成开发环境 (IDE))

919

《UDS协议从入门到精通》系列——图解0x83:访问时间参数

详细介绍UDS协议0x83服务,目标ECU的时序参数设置有哪些注意点?

车载系统攻城狮 2138

J2ME应用程序内存优化三招

out momory 一阵天旋地转内存又溢出了。在手机上这种痛苦经常都有,套一句俗话在手机上用内存必须勒紧裤腰带。虽然现在pc内存上G都不奇怪,可是在手机上却只能以K来记,可能某位同志会马上跳出来说也有上M的,记住中国还不富大多数手机都是低端手机。写手机程序让我仿佛回到了dos时代(自我安慰一下那个时代也炼出了不少高手说不定我是下一个)。言归正传做内存优化可以归结为以下几种方法。代码优化,图片优化

Stone的专栏 2812

ISMN数据处理

可批量下载,十分方便

m0_46268055的博客 1215

j2me 如何优化内存?

内存占用主要有两种,即程序和资源。 程序 类会被编译成class字节码文件随MIDlet的启动加载进内存,而且是一次性全部加入。也就是说MIDlet里类个数越多、单个类程序越长、类内字符串常量及数据越多,编译后的class文件就越大,载入后占用的内存也越多。我经常在MIDlet类的构造函数里用Runtime方法来查看MIDlet启动后整个程序占用内存量。 优化方法: ⒈将MIDlet程序写

bzt820801的博客 376

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

J2ME内存优化(转载)

Out momory 一阵天旋地转内存又溢出了。在手机上这种痛苦经常都有,套一句俗话在 手机上用内存必须勒紧裤腰带。 虽然现在pc内存上G都不奇怪,可是在手机上却只能以K来记,可能某位同志会马上跳 出来说也有上M的,记住中国还不富大多数手机都是低端手机。写手机程序让我仿佛回 到了DOS时代(自我安慰一下那个时代也炼出了不少高手说不定我是下一个)。言归正传做内存优化可以归结为以下几种方法。代码优化,...

非典型程序员 143

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

J2ME内存优化方法

转载:http://www.233.com/Java/jichu/20081101/102241705.html         内存会溢出肯定和代码逃不了关系,99.99%学java的人都知道垃圾回收器是java的一大优点并据此来嘲笑C++。显然这个特性为代码编写者省了不少事,但这个特性却带来了不少隐患。   out momory 一阵天旋地转内存又溢出了。在手机上这种痛苦经常都有,套一句

Android/java之家 650

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

J2ME手机开发之内存优化攻略

在C或C++开发流程中,内存溢出疑问可谓是经常让开发人员极其痛苦的事情,稍不留心疑问就产生,甚至引发隐含的漏洞产生。JAVA正是在C++的优秀品质中继承下来的产物,拥有垃圾回收机制是JAVA虚拟机在C++继承流程中进化的一个主要地点,垃圾回收机制能在对象没被运用之后的某个时间将对象执行回收,从而能使无用对象占据的内存得到释放。但是,这仅仅对有足够内存的Server服务器主机跟PC机上的虚拟机有用,

Go for it! 769

j2me 内存优化

 我想做过J2ME的人,特别是像我这样做手机游戏的,肯定会对OutOfMemoryError这个异常深恶痛绝,尤其是在老40这样变态的机型上,甚至对这个异常都产生了恐惧。还好我现在总算不做这个机型了,对那些仍然在为这个机型移植游戏的同志们感到同情。为了能够稍微缓解一下他们的痛苦,也为了广大J2ME的从业者和爱好者能尽量减少与该异常的见面次数,CoCoMo将把自己的经验分享一下。   首先了解一

Eutopia_ZJ的专栏 684

关于J2ME应用程序内存优化

 out momory 一阵天旋地转内存又溢出了。在手机上这种痛苦经常都有,套一句俗话在手机上用内存必须勒紧裤腰带。虽然现在pc内存上G都不奇怪,可是在手机上却只能以K来记,可能某位同志会马上跳出来说也有上M的,记住中国还不富大多数手机都是低端手机。写手机程序让我仿佛回到了dos时代(自我安慰一下那个时代也炼出了不少高手说不定我是下一个)。言归正传做内存优化可以归结为以下几种方法。代码优化,图片优

孺子牛专栏 779
上一篇: 修改Mac os版本号
下一篇: java.lang.UnsupportedClassVersionError问题的解决方法
wangguoping
博客等级 码龄19年 1粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值