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