JVM 運行時資料區

來源:互聯網
上載者:User
翻譯人員: 鐵錨
翻譯時間: 2013年11月11日
原文連結: JVM Run-Time Data Areas
參考地址: JVM運行時是什麼樣子。

這是閱讀JVM規範時的筆記, 我畫了一幅圖來協助自己加深理解:

圖1 JVM運行時資料區 1. 單線程資料區(非共用)
從上圖可以看出,每個線程都有自己獨立的資料區,包括 PC(程式計數器),JVM(方法)棧,以及本地方法棧. 當建立新線程時,這些資料區域將會一併建立.

程式計數器: 英文名字是 Program Counter Register,簡稱PC, 用於記錄每個線程執行到哪個地方了(可以認為程式是指令的序列,PC記錄著下一條(或本條)應該執行的指令的地址).
JVM方法棧:  包含如下面的圖所示的一些棧幀(frame).
本地方法棧: 英文為 Native Method Stack,顧名思義,適用於供 native方法使用的記憶體空間,本地方法(native method)指不用Java語言開發的方法,如 C,C++,PB等編譯型語言所開發的動態連結程式庫(中的方法).

2. 所有線程共用資料區
堆記憶體 和 方法區 是所有線程共用的資料區.

堆記憶體: 英文名稱 Heap,是Java編程最頻繁使用的記憶體地區. 其中儲存著 數組和對象,當 JVM啟動時即建立此記憶體地區, 記憶體回收主要是指堆記憶體的回收。
方法區: Method Area,儲存了 運行時常量池,類結構資訊(field and method data) 以及 方法,構造器的代碼.
運行時常量池: Runtime Constant Pool, 每一個類或者介面,在其編譯後產生的 .class檔案中,有一個部分叫做 常量表(constant_pool_table),JVM將class檔案載入以後,就解析常量表的內容到運行時常量池. 包括編譯時間方法中就明確可知的數字值,String值, 以及必須在運行時解析的屬性域引用(field reference).

圖2 JVM棧

JVM棧(Stack)由一個個的 棧幀(Frame)組成,當一個方法被調用時會自動壓入一個棧幀到Stack中. 每個棧幀(frame)由局部變數區,運算元棧,以及對常量(池)的引用組成. 想要瞭解更詳細的資訊,建議訪問: JVM官方文檔.

相關文章:

JVM運行時是什麼樣子。 What does a Java array look like in memory? What can we learn from Java HelloWorld? A simple Swing GUI example for Observer Design Pattern

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.