2013-10-26 64 views
3

我想問一個關於靜態屬性的問題。我將以我遇到的情況爲例來解釋它。靜態屬性中的常見資源

我正在開發一個視頻遊戲,其中我必須每隔幾秒創建一個新對象。對此,我正在使用一個池等,但即使使用一個池並重新使用對象,對於內存來說仍然是一個相當昂貴的操作。所以我最終浪費了創建這些對象的所有內存。

試圖優化代碼,我意識到在這個對象的新特性中,有很多昂貴的操作,比如創建新的紋理,動畫等等。然後我意識到所有這些紋理,動畫等對於這種類型的每個對象都很常見,所以我認爲將所有常見的東西放在靜態屬性中。

現在我的問題是:在內存中的哪些地方保存了靜態屬性?每次創建這種新對象時,靜態屬性都會被複制?或者它們都只有一個靜態屬性?我想是第二個,更有意義,但我想確定。

您對我提出的解決方案有何看法?

謝謝!

回答

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

} 
2

Java tutorial

類股類變量,這是在存儲器中的一個固定位置的每一個實例。