靜態方法和變數在物件導向程式設計中發揮著至關重要的作用,它們在所有實例之間提供共享識別一堂課。與實例變數不同,靜態變數每個類別僅存在一次,無論建立的物件數量為何。同樣,靜態方法是類別層級的方法,可以直接從類別本身訪問,而不需要建立類別的實例。
那麼,靜態方法在哪裡和Java中儲存的變數?答案在於永久代(PermGen)或元空間(MetaSpace)的概念。在舊版的 Java 中(Java 8 之前),PermGen 是堆記憶體的一部分,專門用於儲存與類別相關的元數據,包括靜態變數和方法程式碼。然而,從 Java 8 開始,PermGen 已被 Metaspace 取代,Metaspace 具有相同的用途。
靜態變數
靜態變數只是儲存在 PermGen 或 MetaSpace 部分中堆的。每個靜態變數佔用儲存其值的特定記憶體位址。
靜態方法
靜態方法作為類別資料的一部分儲存在 PermGen 或 MetaSpace 區域。方法代碼和相關元資料(例如參數類型和返回類型)被編譯為字節碼並放置在這個專用記憶體區域中。
考慮以下 Java 程式碼:
class A { static int i = 0; static int j; static void method() { // static k = 0; // This won't compile } }
在此範例中,靜態變數 i 和 j 將儲存在堆疊的 PermGen 或 MetaSpace 區域中。靜態方法 method() 也將作為類別元資料的一部分儲存在同一記憶體區域。
無論個體的生命週期如何,靜態變數和方法都會持久存在類別的物件。除非整個類別本身從記憶體中卸載,否則它們不符合垃圾回收的條件。這意味著它們可能無限期地保留在記憶體中,即使該類別不再被任何活動物件使用。
以上是Java的靜態方法和變數儲存在記憶體中的哪裡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!