编程语言
首页 > 编程语言> > java-静态属性中的公共资源

java-静态属性中的公共资源

作者:互联网

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

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

尝试优化代码时,我意识到在此对象的新增功能中,有很多昂贵的操作,例如创建新的纹理,动画等.然后,我意识到所有这些纹理,动画等对于此类对象都是通用的,因此我想将所有通用的东西都放在静态属性中.

现在我的问题是:静态属性保存在内存中的什么位置?每次创建此类新对象时,静态属性都会重复吗?还是所有这些属性只有一个静态属性?我想是第二个,更有意义,但我想确定.

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

谢谢!!

解决方法:

您的解决方案是合理的.您会节省很多内存.

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

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

}

标签:static,memory-management,java
来源: https://codeday.me/bug/20191122/2060925.html