Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
`静态`和非静态`字段可在java Android中获得更好的性能_Java_Android - Fatal编程技术网

`静态`和非静态`字段可在java Android中获得更好的性能

`静态`和非静态`字段可在java Android中获得更好的性能,java,android,Java,Android,我在Android上用openGL 2D开发游戏 因为我的视图很复杂,同时包含300-400个对象(游戏循环),所以获得性能级别是非常重要的 我非常了解java中的静态和非静态字段: private final static int NUMBER = 10; 及 我的问题不是封装(作为OO),而是性能 性能方面最好使用的是,静态或非静态字段 其思想是,对于我的大多数逻辑,我使用诸如float/int之类的原语 我为我的所有“视图”创建了泛型超类,该类必须在性能范围内更有效: 下面是一个例子:

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

因为我的视图很复杂,同时包含300-400个对象(游戏循环),所以获得性能级别是非常重要的

我非常了解java中的
静态
非静态
字段:

private final static int NUMBER = 10;

我的问题不是封装(作为OO),而是性能

性能方面最好使用的是,
静态
非静态
字段

其思想是,对于我的大多数逻辑,我使用诸如
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可以在编译器级别提供一些优化可能性。另一方面,通常静态对象可能不“接近”内存中的实例数据,这对缓存性能不利


一般来说,这不是你应该花时间的地方,除非你已经用尽了所有的算法优化,只有在您知道这实际上是您浪费时间的地方之后,我建议您避免重复进行会使您的设计更糟糕的优化,除非您分析了应用程序并发现问题依赖于对该字段的访问。静态与性能无关。如果字段属于实例,则它不能是静态的。如果它属于一个类,它必须是静态的。你指的是静态/非静态的还是最终/非最终的?在您的示例中,这两个字段都是静态的。示例中的两个变量都是
静态的
@adenoyelle,抱歉,已修复
    /** 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};