首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 第二书店 程序员
您的位置:Mobile->摩托罗拉Linux系统jvm的小缺陷

摩托罗拉Linux系统jvm的小缺陷2007-10-16 来自:lizhe1985  [收藏到我的网摘]

来源:hunhun1981的专栏 - CSDNBlog

  摩托罗拉的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的运算结果。在嵌套循环中,越是内部的函数,越应该优化,勿以善小而不为啊。

推荐人评论

摩托罗拉的linux智能手机,A1200以及E6等等,性能和使用感受都不错。但是手机程序无故抛出数组越界的异常。而且随机性很强。同样代码在别的手机,甚至包括性能比1200弱很多的nokia 40手机也不会出现这个问题。

用户评论

正在载入评论列表...

是谁推荐了此篇文章

专家头像李哲
个人blog发送信息
李哲推荐的其他文章

赞助商精华文章

热点新闻

热点评论

    精彩视频

    精彩专题

    网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|版权声明|问题报告

    北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright 2000-2008, CSDN.NET, All Rights Reserved
    GongshangLogo