首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> J2ME >> J2ME入门 >> 正文
J2ME经验总结之摩托罗拉Linux系统jvm的小缺陷
作者:hunhun19…    文章来源:blog.csdn.net/hunhun1981    更新时间:2007-10-18 9:24:09

摩托罗拉的linux智能手机,A1200以及E6等等,性能和使用感受都不错。
在这些手机上开发j2me软件时,遇到一个匪夷所思的问题。折腾了很久,搞定。赶紧过来跟大家分享我的开发经验。

问题:
程序无故抛出数组越界的异常。而且随机性很强。同样代码在别的手机,甚至包括性能比1200弱很多的nokia 40手机也不会出现这个问题。

经过一系列的排查,排除了内存不够,内存泄漏等等原因。
最终经过分析得出结论,当运行大函数(1000行甚至更多)的时候,栈内存非常不稳定。
……
首先要说明,栈内存是用来存放变量引用的地方。理论上引用都不大啊。怎么会如此娇贵?
也许是jvm的代码区与栈内存区域有点瓜葛?
当然,出现这个问题还有一个原因,我的项目是一个图形图像的算法型函数。
由于对方不了解优化技术。在函数执行过程中,有大量的零时变量产生。
不管怎么说,由于j2me开发几乎无法深入到jvm的实现底层。所以也就只能忍耐一下,根据jvm的这些癖好修改咱们的程序了。

上面的问题,主要出在摩托罗拉的linux智能手机上。而且,改问题不是必现,测试力度不够还未必能发现。
在这个环境下的jvm有可能都存在这个问题(我做过1200和E6的真机测试,在任何的模拟环境下都无法重现这个问题)。

解决方法也很简单
1,拆分所有大函数,一个函数一般不要超过800行(完全是经验值,没有任何理论依据。但是,确实有效)。
2,优化拆分后的函数,尽量减少零时变量的产生。例如:
 for(int i = 0;i < temp + 2;i++)
 这样的代码,没循环一次,就会产生一个整形的临时变量,那就是temp + 2的运算结果。
在嵌套循环中,越是内部的函数,越应该优化,勿以善小而不为啊。
更多的优化方法,这里不再一一叙述。朋友们请自行在网上搜索。

PS:再次谴责那些作风彪悍的程序员,动不动就拿几千行的函数。我不死,IDE也死了!

相关文章:
没有相关文章
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号