<ins id="6k1m6"><video id="6k1m6"></video></ins>

    <ruby id="6k1m6"><option id="6k1m6"></option></ruby>
    <code id="6k1m6"><option id="6k1m6"></option></code>
  1. <output id="6k1m6"></output>
    400-650-7353
    您所在的位置:首頁(yè) > IT干貨資料 > java > 【Java基礎知識】什么是JVM?JVM內存模型由什么組成?(下)

    【Java基礎知識】什么是JVM?JVM內存模型由什么組成?(下)

    虛擬機棧(JVM Stack)

    虛擬機棧(Java Virtual Machine Stack),早期也叫Java棧,每個(gè)線(xiàn)程在創(chuàng )建時(shí)都會(huì )創(chuàng )建一個(gè)虛擬機棧,其內部保存一個(gè)個(gè)的棧幀(Stack Frame),對應著(zhù)一次次的Java方法調用。

    虛擬機棧的作用:主管Java程序的運行,它保存方法的局部變量、部分結果,并參與方法的調用和返回。

    每個(gè)方法被執行的時(shí)候都會(huì )創(chuàng )建一個(gè)”棧幀”,用于存儲局部變量表(包括參數)、操作棧、方法出口等信息。

    每個(gè)方法被調用到執行完的過(guò)程,就對應著(zhù)一個(gè)棧幀在虛擬機棧中從入棧到出棧的過(guò)程。

    棧幀(Stack Frame) 是用于虛擬機執行時(shí)方法調用和方法執行時(shí)的數據結構,它是虛擬棧的基本元素,棧幀由局部變量區、操作數棧等組成,如下圖所示:

    每一個(gè)方法從調用到方法返回都對應著(zhù)一個(gè)棧幀入棧出棧的過(guò)程。最頂部的棧幀稱(chēng)為當前棧幀,棧幀所關(guān)聯(lián)的方法稱(chēng)為當前方法,定義這個(gè)方法的類(lèi)稱(chēng)為當前類(lèi),該線(xiàn)程中,虛擬機有且也只會(huì )對當前棧幀進(jìn)行操作。

    棧幀的作用有存儲數據,部分過(guò)程結果,處理動(dòng)態(tài)鏈接,方法返回值和異常分派。

    每一個(gè)棧幀包含的內容有局部變量表、操作數棧、動(dòng)態(tài)鏈接、方法返回地址和一些額外的附加信息。在編譯代碼時(shí),棧幀需要多大的局部變量表,多深的操作數棧都可以完全確定的,并寫(xiě)入到方法表的code屬性中。

    本地方法棧(Native Stack)

    本地方法棧(Native Method Stacks)與虛擬機棧所發(fā)揮的作用是非常相似的,其區別不過(guò)是虛擬機棧為虛擬機執行Java 方法(也就是字節碼)服務(wù),而本地方法棧則是為虛擬機使用到的Native 方法服務(wù)。

    虛擬機規范中對本地方法棧中的方法使用的語(yǔ)言、使用方式與數據結構并沒(méi)有強制規定,因此具體的虛擬機可以自由實(shí)現它。

    甚至有的虛擬機(譬如Sun HotSpot 虛擬機)直接就把本地方法棧和虛擬機棧合二為一。

    與虛擬機棧一樣,本地方法棧區域也會(huì )拋出StackOverflowError 和OutOfMemoryError異常。

    程序計數器(PC Register)

    在JVM的概念模型里,字節碼解釋器工作時(shí)就是通過(guò)改變這個(gè)計數器的值來(lái)選取下一條需要執行的字節碼指令。

    分支、循環(huán)、跳轉、異常處理、線(xiàn)程恢復等基礎功能都需要依賴(lài)這個(gè)計數器來(lái)完成。

    JVM的多線(xiàn)程是通過(guò)線(xiàn)程輪流切換并分配處理器執行時(shí)間的方式來(lái)實(shí)現的,為了各條線(xiàn)程之間的切換后計數器能恢復到正確的執行位置,所以每條線(xiàn)程都會(huì )有一個(gè)獨立的程序計數器。

    當線(xiàn)程正在執行一個(gè)Java方法,程序計數器記錄的是正在執行的JVM字節碼指令的地址;如果正在執行的是一個(gè)Native(本地方法),那么這個(gè)計數器的值則為空(Underfined)。

    程序計數器占用的內存空間很少,也是唯一一個(gè)在JVM規范中沒(méi)有規定任何OutOfMemoryError(內存不足錯誤)的區域。

    文章“【Java基礎知識】什么是JVM?JVM內存模型由什么組成?(下)”已幫助

    更多內容

    >>本文地址:http://www.littlerockbway.com/zhuanye/2023/72419.html

    THE END  

    聲明:本站稿件版權均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉載。

    1 您的年齡

    2 您的學(xué)歷

    3 您更想做哪個(gè)方向的工作?

    獲取測試結果
    • 大前端大前端
    • 大數據大數據
    • 互聯(lián)網(wǎng)營(yíng)銷(xiāo)互聯(lián)網(wǎng)營(yíng)銷(xiāo)
    • JavaJava
    • Linux云計算Linux
    • Python+人工智能Python
    • 嵌入式物聯(lián)網(wǎng)嵌入式
    • 全域電商運營(yíng)全域電商運營(yíng)
    • 軟件測試軟件測試
    • 室內設計室內設計
    • 平面設計平面設計
    • 電商設計電商設計
    • 網(wǎng)頁(yè)設計網(wǎng)頁(yè)設計
    • 全鏈路UI/UE設計UI設計
    • VR/AR游戲開(kāi)發(fā)VR/AR
    • 網(wǎng)絡(luò )安全網(wǎng)絡(luò )安全
    • 新媒體與短視頻運營(yíng)新媒體
    • 直播帶貨直播帶貨
    • 智能機器人軟件開(kāi)發(fā)智能機器人
     

    快速通道fast track

    近期開(kāi)班時(shí)間TIME

    两个人在线观看免费播放_国产精品天干天干_亚洲婷婷月色婷婷五月小蛇_男人的好小说全文免费阅读