优化:访问字段与方法

Sna*_*ler 3 optimization android class-design

我知道优化的规则#1是:不要这样做!但我认为这是一个简单的问题,如果我现在开始使用更快的方法,那么当我完成时我可以节省大量的cpu时间.

我正在制作一个RPG,让我们说这是自定义类的一部分:

public class Baddie{

    int health;
    int magic;

    public Baddie(int health, int magic){
        this.health = health;
        this.magic = magic;
    }

    public int getHealth(){
        return health;
    }
Run Code Online (Sandbox Code Playgroud)

现在,我的问题的答案可能是"没有区别",这对我很好..我只是想知道.使用字段访问获取Baddie的健康状况是否更快:

//Somewhere in the main thread, I get an instance of Baddie..
Baddie b = getScaryBadGuy();
int baddieHealth = b.health;
Run Code Online (Sandbox Code Playgroud)

或者使用返回方法更快?

int baddieHealth = b.getHealth();
Run Code Online (Sandbox Code Playgroud)

Cri*_*ian 5

复制并粘贴设计性能:

避免内部吸气/安装者

在像C++这样的本地语言中,通常的做法是使用getter(例如i = getCount())而不是直接访问字段(i = mCount).这是C++的一个很好的习惯,因为编译器通常可以内联访问,如果您需要限制或调试字段访问,您可以随时添加代码.

在Android上,这是一个坏主意.虚拟方法调用比实例字段查找要昂贵得多.遵循常见的面向对象编程实践并在公共接口中使用getter和setter是合理的,但在类中,您应该始终直接访问字段.

没有JIT,直接字段访问速度比调用一个简单的getter快约3倍.使用JIT(直接字段访问与访问本地一样便宜),直接字段访问比调用一个简单的getter快约7倍.在Froyo中也是如此,但是当JIT内联getter方法时,将来会有所改进.