标签:static memory-management 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。