设为首页 加入收藏

TOP

Android高效编程的实践
2014-11-24 12:00:18 来源: 作者: 【 】 浏览:0
Tags:Android 高效 编程 实践

1,避免建立对象。 这一点是没有问题的,java编程时都需要尽量控制new 对象的次数,每次在heap中生成新的对象是很费时的。


2,不涉及成员变量和成员方法的方法都定义为static。这一点也没有问题,姑且不论效率问题,这也是OO思想的一个体现。


3,成员变量缓存到本地。 理论上讲,成员变量的访问,是存储在heap中的,heap的访问没有stack中访问高效。而且经过java测试,我发现,对比两次使用成员变量 和 一次申请局部变量缓存后再两次使用局部变量,后者要效率高。代码如下:


用于测试的app为一个surfaceview为主体的重力感应游戏。


为了体现效率方面的变化,我在surfaceview中设定一个变量记录了每60秒游戏中,真正执行代码的时间总和(游戏中使用了50ms为周期的while循环,一周期中不到50秒的会调用sleep()补全时间。这个测试时间就是累加了每个周期中执行游戏逻辑的时间)。


对修改前和修改后的程序,我分别做了二十次测试,取平均值。


意外的是,在我作出如上修改之前,平均值为23.690ms,调整代码后,测试时间平均值均为23.873ms,如此看来,反而修改后的代码有了略微的劣势。




总结:


个人认为,第一、第二条中所讲都是常规编程需要注意的内容,可以确信。


而第三条,作为应对CPU、内存能力有限的移动终端,理论上似乎不错,但实际结果运行却并不如意。


个人猜想,是否是Dalvik虚拟机本身已经对成员变量的访问方面做过了优化? 在网上搜了下,大多都说道,Dalvik是基于寄存器的虚拟机,而常规的JVM是基于栈的虚拟机。对于Dalvik , 在经过SUN JDK编译 生成字节码.class后,还会用DX工具再次优化生成.dex文件。 或许两者本身优化策略的不同,导致了这一试验结果。


欢迎大家探讨。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇《程序员的自我修养——链接、装.. 下一篇Dalvik虚拟机浅识

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)
·[ Linux运维学习 ] (2025-12-26 02:52:27)
·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)