我想问一个关于静态属性的问题。我将以我遇到的一个例子来解释它。
我正在开发一个视频游戏,我必须每隔几秒钟创建一个新对象。对于它,我正在使用池等,但即使使用池并重新使用对象,对于内存来说仍然是相当昂贵的操作。所以我最终浪费了创建这个对象的所有内存。
尝试优化代码,我意识到在这个对象的新功能中,有很多昂贵的操作,比如创建新的纹理,动画等等。然后我意识到所有这些纹理,动画等对于这种类型的每个对象都是常见的,所以我想把所有常见的东西放在静态属性中。
现在我的问题是:内存中的静态属性保存在哪里?每次我创建这种新对象时,静态属性都是重复的?或者所有这些都只有一个静态属性?我想是第二个,更有意义,但我想确定。
您如何看待我提出的解决方案?
谢谢!
答案 0 :(得分:2)
请参阅Java tutorial:
该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。
答案 1 :(得分:1)
您的解决方案是合理的。你会节省很多记忆。
稍微改进的是仍然有一个纹理的实例字段,(等...),但要让该字段指向单个静态纹理。你每个字段“浪费”几个字节,但内存中仍然只有一个大项目(纹理)。优点是,如果将来您希望一些对象具有不同的纹理,您可以这样做。 e.g。
public class MyThing {
// save memory by only having one each
static final Texture SHARED_TEXTURE = createTextureSomehow();
static final Animation SHARED_ANIMATION = createAnimationSomehow();
// instance variables, by default everybody shares the same ones...
private Texture texture = SHARED_TEXTURE;
private Animation animation = SHARED_ANIMATION;
...
// for a special MyThing, like the nastiest Zombie, you can change the texture...
public void setTexture(Texture newTexture) {
this.texture = newTexture;
}
}