Stack 與 Heap in JVM memory

閱讀時間約 3 分鐘
每個method都有一個自己的stack
Instance Variable 會存在heap中
Local Variable 會存在stack中

程式片段

public class Demo {
public static void main(String[] args) {

int data = 10;
Calculator calc = new Calculator();
int result = calc.add(2, 9);
System.out.println(result);

Calculator calc2 = new Calculator();
calc2.add(3, 7);
}
}

class Calculator {
int num = 20;

public int add(int n1, int n2) {
System.out.println(num);
return n1 + n2;
}
}

有兩個class,Demo和Calculator

Demo有:
4個 local variable -> data、calc、result、calc2
1個main method

Calculator有:
1個instance variable -> num
1個add method

說明

raw-image

每個method在JVM中都擁有自己的stack memory

而stack中存的是local variable

add method的 stack中的n1和n2的值,2跟9是從上方程式片段第6行的參數值帶入做範例。
因此main stack中的result變數的值才會是2+9=11

當第6行的add method執行完並返回結果給result之後,add stack就會被釋放。當下一次被呼叫add method時才會再建立一個對應物件的add method stack。

calc和calc2是由Calculator class 建(new)出來,指向Calculator物件的reference variable,同時也是main method中的local variable,所以存在main stack中

被建出來的物件會被存在Heap memory中,並被分發一個地址(例如123, 129隨便)

而後,該地址就會被存到calc和calc2的值的欄位做記錄,訴說著: 當你有事要找calc的時候,請去地址123敲門。然後你可能就帶入12跟23等兩個參數給calc的add method,此時就會建立一個add stack並將12作為n1、23作為n2帶入做計算使用

總結

  • method中宣告的變數會被存在Stack memory中。
  • 所有透過new關鍵字創建的物件會被存在Heap memory並分配地址供Stack memory中的reference variable指向。
  • 基本上除了長駐method(e.g. 進入點main method)之外的method都會在使用時才建立stack memory做資料的暫存計算使用,並在使用完畢後被記憶體釋放掉以免佔用。
  • Heap memory中的資料生命週期通常與整個應用程式的生命週期相同,除非真的很久沒有被呼叫使用,才會被JVM的垃圾回收器回收並釋放記憶體空間。
6會員
18Content count
我的Java學習日記
留言0
查看全部
發表第一個留言支持創作者!
Switch陳述式在 Java 12 之前與之後的差別
WORA, Write Once Run Anywhere Java 不依賴於任何平台,Java可以在任何平台上執行,前提是那平台上要有安裝JVM Java的執行流程
下載完JDK之後,在本機的環境變數中加入此JDK的bin路徑以便系統能識別使用 javac 是java compiler
Switch陳述式在 Java 12 之前與之後的差別
WORA, Write Once Run Anywhere Java 不依賴於任何平台,Java可以在任何平台上執行,前提是那平台上要有安裝JVM Java的執行流程
下載完JDK之後,在本機的環境變數中加入此JDK的bin路徑以便系統能識別使用 javac 是java compiler
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這次訪問到入圍2024台灣原創流行音樂大獎的STACO,來分享他的新專輯《G開頭》,結合宜蘭漳州腔閩語及在地化的聲響效果,用更多元的曲風深入描繪宜蘭,更邀請金曲原民歌后「舞思愛」及台饒巨星「西屯純愛組」參與製作。讓我們一起和STACO揭露專輯製作背後的秘辛吧!
Thumbnail
在之前的教學中,已經學會了Node和Linked List的實作, 用Python實現了單向鏈結串列Singly linked list、雙向鏈結串列Doubly linked list。 今天要承接之前打下的基礎,用雙向鏈結串列來實作Stack 堆疊。
Thumbnail
這篇文章,會帶著大家複習以前學過的配對模型與Stack框架, 並且以括弧配對的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 首先,Stack本身具有Last-In First-Out 後進先出的特質。 再根據題目所需要的資訊利用Stack去儲存索引
Thumbnail
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
Thumbnail
每個method都有一個自己的stack Instance Variable 會存在heap中 Local Variable 會存在stack中
Thumbnail
📔心得 最近,我在探索 Ansible 自動化工具的過程中,決定運用它來建立 ELK Stack,這是我之前使用 Docker 建立的經驗的延伸。在這個過程中,我想分享一下我的學習心得。
🕮此為Podcast說書頻道【TOGETHER 一起讀】EP73《愛、健康與金錢的秘密》讀一本書的文字稿,建議可以搭配音檔效果更佳: 👉ApplePodcast:TOGETHER 一起讀 👉Spotify:TOGETHER 一起讀
🕮此為Podcast說書頻道【TOGETHER 一起讀】EP57《心流》CH7+CH8文字稿,建議可以搭配音檔效果更佳: 👉ApplePodcast:TOGETHER 一起讀 👉Spotify:TOGETHER 一起讀
Thumbnail
建置好前端後, MERN全端工程師教學在這裡 想學習MongoDB和Express可以來這裡學習
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這次訪問到入圍2024台灣原創流行音樂大獎的STACO,來分享他的新專輯《G開頭》,結合宜蘭漳州腔閩語及在地化的聲響效果,用更多元的曲風深入描繪宜蘭,更邀請金曲原民歌后「舞思愛」及台饒巨星「西屯純愛組」參與製作。讓我們一起和STACO揭露專輯製作背後的秘辛吧!
Thumbnail
在之前的教學中,已經學會了Node和Linked List的實作, 用Python實現了單向鏈結串列Singly linked list、雙向鏈結串列Doubly linked list。 今天要承接之前打下的基礎,用雙向鏈結串列來實作Stack 堆疊。
Thumbnail
這篇文章,會帶著大家複習以前學過的配對模型與Stack框架, 並且以括弧配對的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 首先,Stack本身具有Last-In First-Out 後進先出的特質。 再根據題目所需要的資訊利用Stack去儲存索引
Thumbnail
題目會給定一個字串s,裡面都是由() [] {}打散交錯而成。 問我們給定的輸入字串s 是不是合法括弧自串,也就是所有的右括弧都在左括弧後面,而且可以兩兩相消。
Thumbnail
每個method都有一個自己的stack Instance Variable 會存在heap中 Local Variable 會存在stack中
Thumbnail
📔心得 最近,我在探索 Ansible 自動化工具的過程中,決定運用它來建立 ELK Stack,這是我之前使用 Docker 建立的經驗的延伸。在這個過程中,我想分享一下我的學習心得。
🕮此為Podcast說書頻道【TOGETHER 一起讀】EP73《愛、健康與金錢的秘密》讀一本書的文字稿,建議可以搭配音檔效果更佳: 👉ApplePodcast:TOGETHER 一起讀 👉Spotify:TOGETHER 一起讀
🕮此為Podcast說書頻道【TOGETHER 一起讀】EP57《心流》CH7+CH8文字稿,建議可以搭配音檔效果更佳: 👉ApplePodcast:TOGETHER 一起讀 👉Spotify:TOGETHER 一起讀
Thumbnail
建置好前端後, MERN全端工程師教學在這裡 想學習MongoDB和Express可以來這裡學習