首頁 > Java > Java面試題 > java面試之記憶體模型

java面試之記憶體模型

王林
發布: 2020-12-08 15:30:13
轉載
2090 人瀏覽過

java面試之記憶體模型

順豐面試題:你了解Java記憶體模型嗎?

360面試題:程式記憶體的分佈,五個部分

(學習影片分享:java教學影片

#一、 java程式的執行過程

java面試之記憶體模型

Java原始程式碼檔案(.java後綴)會被Java編譯器編譯為字節碼檔(.class後綴),然後由JVM中的類別載入器載入各個類別的字節碼文件,載入完畢之後,交由JVM執行引擎執行。在整個程式執行過程中,JVM會用一段空間來儲存程式執行期間​​需要用到的資料和相關信息,這段空間一般被稱為Runtime Data Area(運行時資料區),也就是我們常說的JVM內存。因此,在Java中我們常說到的記憶體管理就是針對這段空間進行管理(如何分配和回收記憶體空間)。

(更多相關面試題推薦:java面試題目及答案

#二、執行時間資料區包含哪幾部分:

java面試之記憶體模型





##方法區(Method Area):


方法區是各個執行緒共享的記憶體區域,它用於儲存已被虛擬機器載入的類別資訊、常數、靜態變數、即時編譯器編譯後的程式碼等資料。當方法區無法滿足記憶體分配需求時,就會拋出OutOfMemoryError 例外。

方法區裡存放著類別的版本,字段,方法,介面和常數池。常量池裡儲存著字面量和符號引用。符號引用包括:1.類別的全限定名,2.欄位名和屬性,3.方法名和屬性。


JVM堆(Java Heap):



Java 堆也是屬於執行緒共享的記憶體區域,它在虛擬機啟動時創建,是Java 虛擬機所管理的記憶體中最大的一塊,主要用於存放物件實例,幾乎所有的物件實例都在這裡分配內存,注意Java 堆是垃圾收集器管理的主要區域,因此很多時候也被稱為GC 堆,如果在堆中沒有記憶體完成實例分配,且堆也無法再擴充時,將會拋出OutOfMemoryError 例外。


程式計數器(Program Counter Register):


當字節碼解釋器工作時,透過改變這個計數器的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器來完成。

多線程中,為了讓線程切換後能恢復到正確的執行位置,每條線程都需要有一個獨立的程式計數器,各條線程之間互不影響、獨立存儲,因此這塊內存是線程私有的。


虛擬機器堆疊(Java Virtual Machine Stacks):

Java虛擬機器堆疊也是執行緒私有的,它的生命週期與執行緒相同。虛擬機器棧描述的是Java方法執行的記憶體模型:每個方法在執行的同時都會建立一個堆疊幀用於儲存局部變數表、操作數棧、動態鍊錶、方法出口資訊等。每一個方法從呼叫直到執行完成的過程,就對應一個堆疊幀在虛擬機器棧中入棧到出棧的過程。

本機方法堆疊(Native Method Stacks):#########本機方法堆疊屬於執行緒私有的資料區域,這部分主要與虛擬機器用到的Native 方法相關,一般情況下,我們無需關心此區域。 ######(相關推薦:###java入門教學###)###

以上是java面試之記憶體模型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板