Android高效编程实践

  次阅读 来源:互联网(转载协议) 2016-01-14 11:22 我要评论(0)

看过《编写高效的android代码》这篇文章,觉得挺不错的,于是按照其中的说法测试修改了自己的应用代码

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

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

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

public class test {

public long a;

public long b;

test(long x, long y) {

a = x;

b = y;

}

void reset(long x, long y) {

a = x;

b = y;

}

public static void main(String args[]) {

test mt = new test(-1, -1);

System.out.print("成员变量访问 与 局部变量 访问对比 1:\n");

long time = System.currentTimeMillis();

for (long i = 0; i != 1000000; i++) { // 下面是两次对成员变量的使用

if (mt.a == i) {

i++;

}

if (mt.a == i) {

i++;

}

}

System.out.print("成员变量 : " + (System.currentTimeMillis() - time)

+ "ms\n");

time = System.currentTimeMillis();

for (long i = 0; i != 1000000; i++) { // 下面先缓存为局部变量,再两次使用局部变量

long x = mt.a;

if (x == i) {

i++;

}

if (x == i) {

i++;

}

}

System.out.print("局部变量: " + (System.currentTimeMillis() - time)

+ "ms\n\n");

}

}

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

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

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

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

总结:

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

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

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

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...