順豐面試題:你了解Java記憶體模型嗎?
360面試題:程式記憶體的分佈,五個部分
(學習影片分享:java教學影片)
#一、 java程式的執行過程
Java原始程式碼檔案(.java後綴)會被Java編譯器編譯為字節碼檔(.class後綴),然後由JVM中的類別載入器載入各個類別的字節碼文件,載入完畢之後,交由JVM執行引擎執行。在整個程式執行過程中,JVM會用一段空間來儲存程式執行期間需要用到的資料和相關信息,這段空間一般被稱為Runtime Data Area(運行時資料區),也就是我們常說的JVM內存。因此,在Java中我們常說到的記憶體管理就是針對這段空間進行管理(如何分配和回收記憶體空間)。
(更多相關面試題推薦:java面試題目及答案)
#二、執行時間資料區包含哪幾部分:
##方法區(Method Area):
方法區是各個執行緒共享的記憶體區域,它用於儲存已被虛擬機器載入的類別資訊、常數、靜態變數、即時編譯器編譯後的程式碼等資料。當方法區無法滿足記憶體分配需求時,就會拋出OutOfMemoryError 例外。
Java 堆也是屬於執行緒共享的記憶體區域,它在虛擬機啟動時創建,是Java 虛擬機所管理的記憶體中最大的一塊,主要用於存放物件實例,幾乎所有的物件實例都在這裡分配內存,注意Java 堆是垃圾收集器管理的主要區域,因此很多時候也被稱為GC 堆,如果在堆中沒有記憶體完成實例分配,且堆也無法再擴充時,將會拋出OutOfMemoryError 例外。
程式計數器(Program Counter Register):
當字節碼解釋器工作時,透過改變這個計數器的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來完成。
Java虛擬機器堆疊也是執行緒私有的,它的生命週期與執行緒相同。虛擬機器棧描述的是Java方法執行的記憶體模型:每個方法在執行的同時都會建立一個堆疊幀用於儲存局部變數表、操作數棧、動態鍊錶、方法出口資訊等。每一個方法從呼叫直到執行完成的過程,就對應一個堆疊幀在虛擬機器棧中入棧到出棧的過程。
本機方法堆疊(Native Method Stacks):#########本機方法堆疊屬於執行緒私有的資料區域,這部分主要與虛擬機器用到的Native 方法相關,一般情況下,我們無需關心此區域。 ######(相關推薦:###java入門教學###)###以上是java面試之記憶體模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!