J2ME经验总结之摩托罗拉Linux系统jvm的小缺陷


作者:hunhun1981
出自:http://blog.csdn.net/hunhun1981/

摩托罗拉的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也死了! 

更多信息,请关注hunhun1981的专栏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值