Blu*_*ell 23 java optimization performance android
只需在开发网站上阅读:
在像C++这样的本地语言中,通常的做法是使用getter(例如i = getCount())而不是直接访问字段(i = mCount).这是C++的一个很好的习惯,因为编译器通常可以内联访问,如果您需要限制或调试字段访问,您可以随时添加代码.
在Android上,这是一个坏主意.虚拟方法调用比实例字段查找要昂贵得多.遵循常见的面向对象编程实践并在公共接口中使用getter和setter是合理的,但在类中,您应该始终直接访问字段.
没有JIT,直接字段访问速度比调用一个简单的getter快约3倍.使用JIT(直接字段访问与访问本地一样便宜),直接字段访问比调用一个简单的getter快约7倍.在Froyo中也是如此,但是当JIT内联getter方法时,将来会有所改进.
所以它说你会在课堂上使用字段访问:
public class MyObject {
public Object innerObject; // This would be private if I was using a getter
public void doSomeStuff(){
if(innerObject){ // Within class access like this
// ....
}
}
public Object getInnerObject(){ // This would be removed if I was using field access
return innerObject;
}
}
Run Code Online (Sandbox Code Playgroud)
但是从另一个对象访问呢?
public class SecondObject {
public void doSecondSomething(){
MyObject ob = new MyObject();
Object inner;
//This is my question basically (from an Android performance perspective)
inner = ob.getInnerObject();
// OR
inner = b.innerObject
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 31
使用内部getter和setter的性能也适用于外部getter和setter.
然而,在外部情况下,吸气剂和固定剂在其他领域具有显着的益处; 例如,保留封装,减少有害耦合,使代码更易于维护等等.因此,尽管可能会出现性能损失,但通常认为使用getter和setter 是最佳做法.
性能受到了当前一代旧版JIT编译器的限制.使用Gingerbread时,这种情况肯定会有所改善.(参考 - /sf/answers/345137691/ ...并注意谁写了这个答案!)
一般来说,为一个较差的平台"调整"你的代码是一个坏主意,特别是如果有一个合理的机会,一个更好的正在进行中.
| 归档时间: |
|
| 查看次数: |
10187 次 |
| 最近记录: |