榮新教育:堅持面授的良心機構
全國咨詢熱線:400-1335-066
您現在的位置:首頁>行業新聞 > 正文

java內存模型簡述

時間:2018-04-26 17:17:37 來源:榮新IT教育培訓 作者:榮新科技
這幾天一直在介紹linux,其實很多要求高一點的同學會選擇學習研究java這門語言,榮新教育今天給大家講一些簡單的java知識科普,下面一起來看看吧。
java內存模型簡述
程序計數器

可以看作是當前線程所執行的字節碼的行號指示器。在虛擬機的概念模型中,字節碼解釋器工作時就是通過改變這個計數器的值來選取下一條執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都需要一來這個計數器來完成。這個內存區域是唯一一個在 Java 虛擬機規范中沒有規定任何 OutOfMemoryError 情況的區域。

Java 虛擬機棧

虛擬機棧描述的是 Java 方法執行的內存模型:每個方法在執行的同時都會創建一個棧幀用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。每個方法從調用直至執行完成的過程,就對應著一個棧幀在虛擬機中入棧到出棧的過程。

我們平常說的棧內存,一般就是指局部變量表。局部變量表中存放了編譯期可知的各種基本數據類型、對象引用和 returnAddress(指向了一條字節碼指令的地址)類型。其中64位長度的 long 和 double 類型的數據會占用 2 個局部變量空間(Slot),其余數據類型只占用一個。局部變量表所需的內存空間在編譯期間完成分配,當進入一個方法時,這個方法需要在棧幀中分配多大的局部變量空間是完全確定的,在方法運行期間不會改變局部變量表的大小。

虛擬機棧的兩種異常情況:

線程請求的棧深度大于虛擬機所允許的深度,將拋出 StackOverflowError 異常。

虛擬機動態擴展時無法申請到足夠的內存,拋出 OutOfMemoryError 異常。

本地方法棧

與虛擬機棧作用類似,它們之間區別是虛擬機棧執行 Java 方法,而本地方法棧則為虛擬機使用到的 Native 方法服務。與虛擬機棧一樣,本地方法棧區域也會拋出 StackOverflowError 和 OutOfMemoryError 異常。

Java 堆

對大多數應用來說, Java 堆是虛擬機所管理的內存中最大的一塊。這一內存區域是所有線程共享的,在虛擬機啟動時候創建。此區域的唯一目的就是存放對象實例。幾乎所有的對象實例都在這里分配內存(不全是)。Java 堆是垃圾收集管理的主要區域,從回收角度看 Java 堆可以細分為:新生代、老生代;再細致一點的有 Eden、From Survivor、To Survivor。

方法區

用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。
文章源自榮新教育官網:www.berkantcoskun.com歡迎訪問,轉載需注明出處

成人av影片