3

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

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

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

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

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

谢谢!!

4

2 回答 2

2

请参阅Java 教程

类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。

于 2013-10-26T15:36:25.987 回答
1

你的解决方案是合理的。你会节省很多内存。

一个轻微的改进是仍然有纹理的实例字段,(等等......),但让该字段指向单个静态纹理。每个字段“浪费”了几个字节,但内存中仍然只有一个大项目(纹理)。优点是,如果将来您希望一些对象具有不同的纹理,您可以这样做。例如

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

}
于 2013-10-26T15:52:03.437 回答