當前位置:才華齋>IT認證>JAVA認證>

Java的記憶體劃分全解析

JAVA認證 閱讀(2.62W)

Java把記憶體劃分成兩種:一種是棧記憶體,一種是堆記憶體。下面一起來看看java的記憶體劃分全部內容。

Java的記憶體劃分全解析

  棧記憶體

存放物件:函式中基本型別的變數和物件的引用變數、靜態類方法

特點:棧有一個很重要的特殊性,就是存在棧中的資料可以共享。假設我們同時定義:

inta=3;

intb=3;

編譯器先處理inta=3;首先它會在棧中建立一個變數為a的引用,然後查詢棧中是否有3這個值,如果沒找到,就將3存放進來,然後將a指向3。

接著處理intb=3;在建立完b的引用變數後,因為在棧中已經有3這個值,便將b直接指向3。這樣,就出現了a與b同時均指向3的情況。

  堆記憶體

存放物件:用來存放由new建立的物件和陣列。

特點:在堆中分配的記憶體,由Java虛擬機器的自動垃圾回收器來管理。

在堆中產生了一個數組或物件後,還可以在棧中定義一個特殊的變數,讓棧中這個變數的取值等於陣列或物件在堆記憶體中的'首地址,棧中的這個變數就成了陣列或物件的引用變數。

引用變數就相當於是為陣列或物件起的一個名稱,以後就可以在程式中使用棧中的引用變數來訪問堆中的陣列或物件。

Q:static關鍵字,是一個修飾符,用於修飾成員(成員變數和成員函式),有什麼特點

A:1,想要實現物件中的共性資料的物件共享。可以將這個資料進行靜態修飾。

2,被靜態修飾的成員,可以直接被類名所呼叫。也就是說,靜態的成員多了一種呼叫方式。類名.靜態方式。

3,靜態隨著類的載入而載入。而且優先於物件存在。