2013-07-19 31 views
3

我用Android上的openGL 2D开发游戏。`static`和`non-static`字段在java中有更好的性能Android

这是非常无能获得的性能水平,因为我的看法是复杂的,包含在同一时间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场比较好,嗯

谢谢

+6

我建议你避免重复到优化是将会使您的设计更糟糕,除非你异形你的应用程序,并发现该问题在访问该领域的依赖。 – mariosangiorgio

+4

静态与性能无关。如果该字段属于某个实例,则该字段不能是静态的。如果它属于一个类,它必须是静态的。 –

+2

你的意思是静态/非静态还是最终/非最终?在你的例子中,这两个字段都是静态的。 –

回答

9

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

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

在一般情况下,这是不是你应该花时间,直到/除非你已经用尽了所有的算法最优化的,然后你只知道经过这其实是你失去的时间。