静态属性中的公共资源

时间:2013-10-26 15:31:42

标签: java memory-management static

我想问一个关于静态属性的问题。我将以我遇到的一个例子来解释它。

我正在开发一个视频游戏,我必须每隔几秒钟创建一个新对象。对于它,我正在使用池等,但即使使用池并重新使用对象,对于内存来说仍然是相当昂贵的操作。所以我最终浪费了创建这个对象的所有内存。

尝试优化代码,我意识到在这个对象的新功能中,有很多昂贵的操作,比如创建新的纹理,动画等等。然后我意识到所有这些纹理,动画等对于这种类型的每个对象都是常见的,所以我想把所有常见的东西放在静态属性中。

现在我的问题是:内存中的静态属性保存在哪里?每次我创建这种新对象时,静态属性都是重复的?或者所有这些都只有一个静态属性?我想是第二个,更有意义,但我想确定。

您如何看待我提出的解决方案?

谢谢!

2 个答案:

答案 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;
   }

}