首頁>Club>
8
回覆列表
  • 1 # 藍橋java學院

    一種是棧記憶體,一種是堆記憶體。堆是用來存放物件的,棧是用來執行程式的。

    堆需要透過new等方式來建立;棧記憶體的主要作用是存放基本資料型別和引用變數。棧的記憶體管理是透過棧的"後進先出"模式來實現的。

  • 2 # Java實戰技術

    Java執行時資料區中的棧有Java虛擬機器棧和本地方法棧,都是用於方法的執行;堆用於存放物件例項和陣列。

    Java虛擬機器棧

    每個Java方法執行的時候都會建立一個棧幀,棧幀用於儲存區域性變量表、運算元棧、動態連結串列和方法出口等資訊,每個Java方法從開始呼叫到執行完成的過程,都對應著一個棧幀在Java虛擬機器棧中入棧到出棧的過程。在Java虛擬機器規範中規定,如果執行緒請求的深度大於虛擬機器所允許的深度,將丟擲StackOverflowError異常;如果虛擬機器可以動態擴充套件,但是在擴充套件時申請不到足夠的記憶體,將會丟擲OutOfMemoryError異常。Java虛擬機器棧的生存週期是跟隨執行緒的,是執行緒私有的。

    本地方法棧

    Java虛擬機器棧是為執行Java方法服務的,而本地方法棧是為執行本地方法服務的,它的作用與Java虛擬機器棧相似,同樣它也會丟擲StackOverflowError異常和OutOfMemoryError異常。本地方法棧的生存週期也是跟隨執行緒的,也是執行緒私有的。

    堆是Java虛擬機器中記憶體空間最大的一塊,基本上所有的物件例項及陣列都在這裡分配記憶體空間,它是所有執行緒共享的區域。在Java虛擬機器規範中,堆可以處於物理上不連續的記憶體空間,只要邏輯上連續就行。當堆中沒有足夠記憶體分配時,並且此時也無法再擴充套件,將會丟擲OutOfMemoryError異常。

  • 中秋節和大豐收的關聯?
  • 寶寶拉肚子,剛換好尿不溼一會又拉,每次只拉一點點屎水水的,怎麼辦?