有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

静态属性中的java公共资源

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

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

为了优化代码,我意识到在这个对象的新版本中,有很多昂贵的操作,比如创建新的纹理、动画等等。然后我意识到所有这些纹理、动画等对于这类对象来说都是常见的,所以我想把所有常见的东西都放在静态属性中

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

你觉得我提出的解决方案怎么样

谢谢


共 (2) 个答案

  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;
       }
    
    }
    
  2. # 2 楼答案

    Java tutorial

    Every instance of the class shares a class variable, which is in one fixed location in memory.