WEB开发网
开发学院手机开发Android 开发 Android应用程序运行的性能设计 阅读

Android应用程序运行的性能设计

 2013-01-14 16:07:08 来源:WEB开发网   
核心提示:9. 在私有内部内中,考虑用包访问权限替代私有访问权限考虑下面的定义:public class Foo { private class Inner { void stuff() { Foo.this.doStuff(Foo.this.mValue); } }private int mValue;public void
9. 在私有内部内中,考虑用包访问权限替代私有访问权限
考虑下面的定义:public class Foo {
private class Inner {
void stuff() {
Foo.this.doStuff(Foo.this.mValue);
}
}

private int mValue;

public void run() {
Inner in = new Inner();
mValue = 27;
in.stuff();
}

private void doStuff(int value) {
System.out.println("Value is " + value);
}
}
需要注意的关键是:我们定义的一个私有内部类(Foo$Inner)直接访问外部类中的一个私有方法和私有变量。这是合法的,代码也会打印出预期的Value is 27。
但问题是虚拟机认为从Foo$Inner中直接访问Foo的私有成员是非法的,因为他们是两个不同的类,尽管Java语言允许内部类访问外部类的私有成员,编译器生成几个综合方法来桥接这些间隙。
Java代码
static int Foo.access$100(Foo foo) {
return foo.mValue;
}
static void Foo.access$200(Foo foo, int value) {
foo.doStuff(value);
}

内部类会在外部类中任何需要访问mValue字段或者doStuff方法的地方调用这些静态方法。这意味着这些代码将直接存取成员变量归结为通过存取器方法访问。之前提到存取器访问如何比直接访问慢,这例子说明,某些语言约定导致了不可见的性能问题。
如果你在高性能的Hotspot中使用这些代码,可以通过声明被内部类访问的字段和成员为包访问权限,而非私有。不幸的是这意味着这些字段会被其他处于同一个包中的类访问,因此在公共API中不宜采用。
10. 合理利用浮点数
通常的经验是,在Android设备中,浮点数会比整型慢两倍,在缺少FPU,或是JIT的G1以及有FPU和JIT的Nexus One中确实如此(两种设备间算数运算的绝对速度差大约是10倍).
速度术语中,在现代硬件上,float和double之间并没有不同。更广泛的讲,double大约2倍大。在没有存储空间问题的桌面机器中,double的优先级高于float。
但即使是整型,有些芯片拥有硬件乘法,却缺少除法。这种情况下,整型除法和求模运算是通过软件实现的,考虑下当你设计Hash表,或是做大量的算术。

上一页  1 2 3 

Tags:Android 应用程序 运行

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接