`static`和`non-static`字段可以在java Android中获得更好的性能

时间:2013-07-19 12:47:14

标签: java android

我在Android上使用openGL 2D开发游戏。

由于我的视图很复杂并且同时包含300-400个对象(游戏循环),所以获得性能水平非常无能为力。

我非常了解java中的staticnon-static字段:

private final static int NUMBER = 10;

private final int NUMBER = 10;

我的问题不是封装(如OO)而是性能。

什么更适合用于效果,staticnon-static字段。

我的想法是,对于我的大多数逻辑,我使用像float/int这样的原语。

我为所有“视图”创建了通用超类,这个类在性能范围内必须更有效:

以下是示例:

    /** Sprite sheet definition */
private final int SPRITE_WIDTH = 4;
private final int SPRITE_HEIGHT = 4;

private float mScreenWidth, mScreenHeight, wRatio, hRatio;
private int mFrame = 0;
private int mSwitcher = 0;
private final int TEXTURE_COUNT = 1; // for sprite sheet we use 1 image all the time.
private int[] textures = new int[TEXTURE_COUNT]; // frame animation

protected FloatBuffer vertexBuffer;

private final ESpriteDirection mDirection = ESpriteDirection.TOP_TO_DOWN_LEFT_TO_RIGHT;


public float x, y, initPos, finalPos, initSpeed, currentPos;

private ByteBuffer bb1;

private final int TOTAL_IMAGE_COUNT_IN_SPRITE = SPRITE_WIDTH * SPRITE_HEIGHT;

private FloatBuffer[] floatBufferArray = new FloatBuffer[TOTAL_IMAGE_COUNT_IN_SPRITE];

private float xOffset = 1.0f/SPRITE_WIDTH;
private float yOffset = 1.0f/SPRITE_HEIGHT;




private float vertices[] = {            
        0.0f,3.0f,0.0f,
        0.0f,0.0f,0.0f,                 
        3.0f,3.0f,0.0f,
        3.0f,0.0f,0.0f  
};


private float storage[][] = new float[TOTAL_IMAGE_COUNT_IN_SPRITE][];
private int[] sprite_X_Indexes = new int[SPRITE_WIDTH];//{1,2,3,4}; 
private int[] sprite_Y_Indexes = new int[SPRITE_WIDTH];//{1,2,3,4};

我可以猜测,对于同一个类static字段的多次启动更好,嗯

谢谢,

1 个答案:

答案 0 :(得分:9)

从性能POV开始,一旦你的代码被编译,应该没什么区别,因为你的静态和(单个)非静态字段都已经转换成了一个内存位置。

声明字段static可能会在编译器级别提供一些优化可能性。另一方面,通常静态对象可能不会“接近”内存中的实例数据,这对缓存性能有害。

一般来说,除非你已经用尽所有算法优化,否则你应该花费时间,然后才知道这实际上是你失去时间的地方。