在Java中存儲靜態方法和靜態變量在哪裡?


2 Answers

類變量(靜態變量)作為與該類關聯的Class object一部分存儲。 這個Class對像只能由JVM創建並存儲在permanent generation

還有一些人回答說它存儲在稱為Method Area.非堆Method Area. 即使這個答案沒有錯。 Permgen Area是否是堆的一部分,這只是一個有爭議的話題。 很顯然,人與人之間的看法各不相同。 在我看來,我們在JVM參數中提供了堆空間和permgen空間。 因此,以不同的方式對待他們是一個很好的假設。

另一種方式看到它

內存池由JVM內存管理器在運行時創建。 內存池可能屬於堆或非堆內存。運行時常量池是類文件中constant_pool表的每類或每界面運行時表示。 每個運行時常量池都從Java虛擬機的方法區域分配,靜態變量存儲在此方法區域中。 另外這個非堆不過是燙髮區域。實際上,方法區域是燙髮的一部分( Reference

Question

例如:

class A {
    static int i=0;
    static int j;

   static void method() {
       // static k=0; can't use static for local variables only final is permitted
       // static int L;
    }
}

這些變量將在Java中,堆或棧內存中存儲在哪裡? 他們如何存儲?




靜態變量存儲在堆中




它存儲在類定義引用的堆中。 如果你仔細想想,它與堆棧無關,因為沒有範圍。




Related



Tags

java java   jvm