- 浏览: 626177 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (448)
- 字符串相关 (16)
- Struts2页面显示 (15)
- Hibernate错误记录 (6)
- linux命令 (2)
- java项目测试 (5)
- 个人作品 (10)
- hibernate应用 (15)
- struts1 (7)
- 数据库(除了hibernate) (42)
- J2ME/WAP (37)
- servlet/jsp (49)
- java桌面应用+java综合 (14)
- 服务器配置,报错解决 (24)
- Myeclipse配置,抛错解决 (8)
- linux (18)
- JavaScript+jquery+ajax (45)
- div css 页面设计 (16)
- 互联网综合运营 (14)
- 编程工具类 (3)
- 论文 报告 文献 (14)
- PHP (26)
- struts2 (9)
- spring (1)
- 我的IT生活 (14)
- Resin (6)
- java项目记录 (14)
- https安全 (11)
- 支付技术 (3)
最新评论
-
yihaijunyxr:
很好呀,我好久没用iteye了,今天找出两个帐号(yihaij ...
c/c++的监听tmlisten启动缓慢解决 -
yihaijun:
好像这不算是技术博客,是工作博客
c/c++的监听tmlisten启动缓慢解决 -
ml365:
后来还优化了webservice的前置框架,不用cxf,用了另 ...
c/c++的监听tmlisten启动缓慢解决 -
Jayliuying:
有点晚哈 但是也支持一下 楼主
java相关论文的参考文献【转】 -
gqsunrise:
...
我是项目经理,我的项目管理日记【20120229】
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 ,关闭
没用的网络连接,关闭没用的流。正确地停止线程。良好的程序架构减少代码偶合性也
是一个不错的方法,无论在代码调式,内存释放都可以做到非常清析。
二. 图片优化
J2ME的内存杀手无疑非图片莫属,一张3k的图片可以占用20多k的内存不信大家把
load前后的内存剩余打印出来对比看看。所以防止内存溢出最直接的办法就是从图片入
手。
1.图片压缩: 多数人马上会想到这个办法。不错这个办法是最有效的。在photoshop里
图片制作完成后不要选择 "存储为",而是选择 "存储为 web 所用格式" 可以根据里面
的选项进行压缩,特别是颜色这一项越小越好不过相应的图像会有所失真。不要认为这
样就完了。
实际上该图片还可以再次压缩,在网上有许多类似的工具。推荐一款可以压缩png格式
的软件 xat.com Image Optimizer 效果不错。经常都有 70% 的压缩率且图像不会失
真。
假如你有多张规格一样的图片,那么建议你把它做成一张长条图片。有两个原因:
1、这样节省存储空间和内存空间。大家可做个试验将10张图片的内容放在一张当中对
比看看文件大小有没有变化。
2、10张图片需要10个image 对象需要进行10次io操作浪费时间不说还浪费内存。当笔
者发现这个好处时兴奋地把所有图片都存成一张,吱地一声内存又溢出了...原因想必
大家也知道!!图片太大了不要把不同界面的图片整合在一起否则经常会得不偿失。
作图时还有一些细节需要注意,颜色数量,分辩率,图像模式(最好是索引颜色),
画布大小都会影响到图片大小。
三.工具优化
谁都知道混淆器是用来保护代码的以加大反编译的难度(个人认为这是在嘲笑程序
员的智商)。实际上用它来优化程序也是不错的选择,至少有两点好处:1、 压缩程序
大小。一个60k的程序经常可以压掉10k左右。10k的空间对于写低端手机的程序员简直
是雪中送碳,多少超过64k限制的游戏都受过它的恩惠;2、节省内存空间。用脚去想也
想得出来代码少了内存里的代码段自然就短了。
根据经验很多人都会用jb自带的混淆器RetroGuard,实际上它效果并不怎么好。推
荐使用proguard 在 http://sf.net 可以免费下载,它可以比retroguard 多压缩3至4 k 以上而且安全性更好。
一.代码优化
内存会溢出肯定和代码逃不了关系,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 ,关闭
没用的网络连接,关闭没用的流。正确地停止线程。良好的程序架构减少代码偶合性也
是一个不错的方法,无论在代码调式,内存释放都可以做到非常清析。
二. 图片优化
J2ME的内存杀手无疑非图片莫属,一张3k的图片可以占用20多k的内存不信大家把
load前后的内存剩余打印出来对比看看。所以防止内存溢出最直接的办法就是从图片入
手。
1.图片压缩: 多数人马上会想到这个办法。不错这个办法是最有效的。在photoshop里
图片制作完成后不要选择 "存储为",而是选择 "存储为 web 所用格式" 可以根据里面
的选项进行压缩,特别是颜色这一项越小越好不过相应的图像会有所失真。不要认为这
样就完了。
实际上该图片还可以再次压缩,在网上有许多类似的工具。推荐一款可以压缩png格式
的软件 xat.com Image Optimizer 效果不错。经常都有 70% 的压缩率且图像不会失
真。
假如你有多张规格一样的图片,那么建议你把它做成一张长条图片。有两个原因:
1、这样节省存储空间和内存空间。大家可做个试验将10张图片的内容放在一张当中对
比看看文件大小有没有变化。
2、10张图片需要10个image 对象需要进行10次io操作浪费时间不说还浪费内存。当笔
者发现这个好处时兴奋地把所有图片都存成一张,吱地一声内存又溢出了...原因想必
大家也知道!!图片太大了不要把不同界面的图片整合在一起否则经常会得不偿失。
作图时还有一些细节需要注意,颜色数量,分辩率,图像模式(最好是索引颜色),
画布大小都会影响到图片大小。
三.工具优化
谁都知道混淆器是用来保护代码的以加大反编译的难度(个人认为这是在嘲笑程序
员的智商)。实际上用它来优化程序也是不错的选择,至少有两点好处:1、 压缩程序
大小。一个60k的程序经常可以压掉10k左右。10k的空间对于写低端手机的程序员简直
是雪中送碳,多少超过64k限制的游戏都受过它的恩惠;2、节省内存空间。用脚去想也
想得出来代码少了内存里的代码段自然就短了。
根据经验很多人都会用jb自带的混淆器RetroGuard,实际上它效果并不怎么好。推
荐使用proguard 在 http://sf.net 可以免费下载,它可以比retroguard 多压缩3至4 k 以上而且安全性更好。
发表评论
-
什么是WAP网关?
2011-10-17 17:09 10151. 什么是WAP网关? WA ... -
判断用户通过手机访问wap还是电脑直接访问
2011-10-17 16:29 1989首先说最根本的解决 ... -
wap的全面解析!!
2011-10-17 16:29 18121. 开发WAP软件需要哪 ... -
j2me library failed to get library information[转]
2010-12-11 21:59 1167出現過類似問題,我是每次都用的run as...->ru ... -
j2me联网时候对于代理问题可能会出现的错误【转】
2010-12-11 11:30 775众所周知,CMWAP是一个网关,同时又是一个代理服务器,我 ... -
在无线J2ME设备上实现超文本传输协议【转】
2010-12-11 11:27 759随着越来越多手提电 ... -
J2ME使用Socket通过cmwap接入点访问安全HTTPS 2【转】
2010-12-11 11:26 1261新建一个Midp应用程序,在startApp中加入以下代码: ... -
J2ME使用Socket通过cmwap接入点访问安全HTTPS1 【转】
2010-12-11 11:25 1402这个问题是在我升级J2ME版XHTML浏览器的时候被引入的,我 ... -
J2ME无线联网技术中的HTTP连接[转]
2010-12-11 11:24 862import java.io.ByteArrayOutputS ... -
wml教程 中文手册
2010-12-11 01:02 903http://www.g168.net/txt/wml/ ... -
j2me结合j2ee实现用户登陆功能-2【转】
2010-12-11 00:41 948服务器代码:LoginServlet:package co ... -
j2me结合j2ee实现用户登陆功能【转】
2010-12-11 00:40 847手机客户端代码:LoginForm:package com ... -
独立WAP交友网站趋势分析
2010-12-10 19:28 975从互联网开始,交友网 ... -
什么是WAP?wap技术简介(转)
2010-12-10 19:25 975程序员都在讨论Wireless(无线)技术,也就是常说到的WA ... -
j2me游戏开发:控制飞机移动(转)
2010-12-10 19:01 9131. 飞机plane是一个标准的plane。由三桢画面组成,: ... -
j2me游戏开发:工具类的完善(转)
2010-12-10 19:00 934虽然我们有了midp2.0的支持,但是有时还是需要一些辅助工具 ... -
J2ME程序教程,程序+讲解,很好的入门教程(转载) 【2】
2010-12-10 18:59 724J2ME RPG游戏边学边做(二) 1、public vo ... -
J2ME程序教程,程序+讲解,很好的入门教程(转载) 【1】
2010-12-10 18:58 1120J2ME RPG游戏边学边做(一) 笔者以前是做j2ee的 ... -
PngMate使用教程2(转)
2010-12-10 18:57 864下面我们来换一张图片,街头霸王Ken,这张gif的帧数比较多, ... -
PngMate使用教程1(转)
2010-12-10 18:56 1311PngMate使用教程 JAVA手机网[www.cnjm.n ...
相关推荐
在J2ME(Java 2 Micro Edition)开发中,代码优化和内存优化是至关重要的环节,因为资源有限的移动设备需要高效且节省内存的应用。以下是一些基于标题和描述的知识点,以及可能从压缩包文件中学到的内容: 1. **...
### J2ME内存优化 #### 一、代码优化 在J2ME开发中,内存管理是至关重要的。由于设备资源有限,高效的内存管理能够确保应用的稳定性和性能。本节将详细探讨如何通过代码优化来避免内存溢出。 1. **垃圾回收机制的...
在J2ME开发中,内存优化是至关重要的,因为手机平台的内存资源相对有限,而内存溢出会导致程序运行不稳定甚至崩溃。以下是针对J2ME内存优化的一些关键方法和策略: 1. **代码优化** - **手动内存管理**:由于J2ME...
5. **J2ME优化工具**: - 使用J2ME Wireless Toolkit (WTK)的Profile工具可以分析代码,找出性能瓶颈,指导优化方向。 6. **实例分析**: - 文章中可能提供了一个简单的MIDlet应用示例,用于展示优化前后的性能...
- **使用轻量级库**:选择针对J2ME优化的库,避免引入不必要的功能和大小。 **7. 性能测试与分析** - **使用性能分析工具**:监控和分析程序的运行情况,找出性能瓶颈。 - **代码审查**:定期进行代码审查,查找并...
基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化...
J2ME应用程序性能优化J2ME应用程序性能优化
### J2ME游戏优化的秘密 #### 一、引言 J2ME(Java 2 Micro Edition)是Java的一个分支版本,专门针对移动设备和嵌入式应用开发设计。随着移动设备性能的提升以及用户对游戏体验需求的增加,优化J2ME游戏成为了一...
### J2ME代码优化的两种方案(2):详解与实践 #### 一、引言 J2ME(Java 2 Platform, Micro Edition)作为早期移动设备开发的主要平台之一,在资源极其有限的情况下进行高效的代码编写变得尤为重要。本文将详细介绍...
J2ME 代码优化 J2ME代码一般的优化方法,为什么要优化 主要优化哪些方面
### J2ME代码优化的两种方案(1):详解与实践 #### 一、引言 随着移动设备的发展,Java 2 Micro Edition (简称 J2ME) 作为一款专为资源受限设备设计的 Java 平台版本,在早期的手机、PDA 等设备上得到了广泛应用。...
以下就是十个针对J2ME程序优化的小方法,旨在提高程序运行效率,减少内存占用,提升用户体验。 1. **合理使用数据结构**:J2ME中的数据结构如ArrayList和Vector在内存管理上不如Java SE高效。考虑使用数组代替...
**J2ME优化压缩PNG文件程序代码详解** J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机和智能手表。在这个场景下,资源优化至关重要,尤其是图像文件,因为它们通常占据...
### J2ME应用程序性能优化的探讨 #### 引言 随着移动互联网的快速发展,Java 2 Micro Edition(简称J2ME)作为一种适用于嵌入式设备和消费性电子产品上的Java平台,为开发者提供了丰富的开发工具和环境。然而,...
手机游戏开发重要技术资料分享25.J2ME代码优化.zip
J2ME优化压缩PNG文件的程序就是为了满足这种需求而设计的。 该程序是一个控制台应用,它通过去除PNG文件中非关键的数据段来减小文件体积,以实现无损压缩。在PNG文件结构中,存在一些可选的数据块,如文本信息、...