最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JVM?中的?returnAddress過程詳解

 更新時間:2022年04月29日 09:21:57   作者:m0_67402013  
JVM的畢竟是個虛擬機,是一種規(guī)范,雖說符合馮諾依曼的計算機設(shè)計理念,但是他并不是實體計算機,所以他的組成也不是什么存儲器,控制器,運算 器,輸入輸出設(shè)備,本文給大家介紹JVM?中的?returnAddress,感興趣的朋友一起看看吧

JVM是虛擬機,也是一種規(guī)范,他遵循著馮·諾依曼體系結(jié)構(gòu)的設(shè)計原理。馮·諾依曼體系結(jié)構(gòu)中,指出計算機處理的數(shù)據(jù)和指令都是二進制數(shù),采用存儲 程序方式不加區(qū)分的存儲在同一個存儲器里,并且順序執(zhí)行,指令由操作碼和地址碼組成,操作碼決定了操作類型和所操作的數(shù)的數(shù)字類型,地址碼則指出地址碼和 操作數(shù)。從dos到window8,從unix到ubuntu和CentOS,還有MAC OS等等,不同的操作系統(tǒng)指令集以及數(shù)據(jù)結(jié)構(gòu)都有著差異,而JVM通過在操作系統(tǒng)上建立虛擬機,自己定義出來的一套統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)和操作指令,把同一套語 言翻譯給各大主流的操作系統(tǒng),實現(xiàn)了跨平臺運行,可以說JVM是java的核心,是java可以一次編譯到處運行的本質(zhì)所在。

參考文檔:jvms12

數(shù)據(jù)類型

在 JVM 中,數(shù)據(jù)分為兩大類:primitive types (原生類型)和 reference types(引用類型)。

引用類型,讓 JVM 能更好的支持于面向?qū)ο笳Z言的設(shè)計,引用類型的值用來指向內(nèi)存中分配的類實例或者數(shù)組。JVM 規(guī)范中并沒有詳細規(guī)定引用類型的實現(xiàn)細節(jié),比如引用應(yīng)該通過何種方式去定位、訪問堆中的對象,具體的對象訪問方式取決于虛擬機的具體實現(xiàn),比如 HotSpot 有其自己的實現(xiàn)方案。

目前主流的訪問方式有使用句柄和直接指針兩種:

其中使用直接指針訪問的方式,類似于 C++ 中的虛表(虛表就是指向?qū)ο箢愋蛿?shù)據(jù)的指針)。這兩種對象訪問方式各有優(yōu)劣,使用句柄訪問的最大好處就是 reference 中存儲的是穩(wěn)定的句柄地址,在對象被移動(比如垃圾回收時,整理內(nèi)存空間,會移動對象的存儲位置)時只會改變句柄中示例數(shù)據(jù)的指針,而 reference 本身不需要修改。

使用直接指針訪問的最大好處就是速度更快,節(jié)省了一次內(nèi)存尋址的時間開銷。

原生數(shù)據(jù)類型包括:numeric types, boolean type, returnAddress type。其中 returnAddress 數(shù)據(jù)只存在于字節(jié)碼層面,與編程語言無關(guān),也就是說,我們在 Java 語言中是不會直接與 returnAddress 類型的數(shù)據(jù)打交道的。

returnAddress 類型的值是指向字節(jié)碼的指針,不管是物理機還是虛擬機,運行時內(nèi)存中的數(shù)據(jù)總歸可分為兩類:代碼,數(shù)據(jù)。對于馮諾依曼結(jié)構(gòu)的計算機,指令數(shù)據(jù)和數(shù)值數(shù)據(jù)都存儲在內(nèi)存中,而哈弗結(jié)構(gòu)的計算機,將程序指令與數(shù)據(jù)分開存儲。

對于 JVM 來說,程序就是存儲在方法區(qū)的字節(jié)碼指令,而 returnAddress 類型的值就是指向特定指令內(nèi)存地址的指針。

JVM支持多線程,每個線程有自己的程序計數(shù)器(pc register),而 pc 中的值就是當前指令所在的內(nèi)存地址,即 returnAddress 類型的數(shù)據(jù),當線程執(zhí)行 native 方法時,pc 中的值為 undefined。

棧幀

棧幀(Stack Frame)是用于支持虛擬機進行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu),棧幀中存儲了方法的局部變量表,操作數(shù)棧,動態(tài)連接,和方法返回地址等信息。在程序編譯時,棧幀中需要多大的局部變量表,多深的操作數(shù)棧都已經(jīng)完全確定了,并且寫在方法表的 Code 屬性中。

當一個方法開始執(zhí)行后,只有兩種方式可以退出,第一種方式是執(zhí)行引擎遇到任意一個方法返回的字節(jié)碼指令,這種方式稱為正常完成出口;另外一種退出方式是,在方法執(zhí)行過程中遇到異常,且該異常沒有被被捕獲,稱為異常完成出口。

無論是哪種退出方式,在方法退出后,都需要返回到該方法被調(diào)用的位置(地址),讓程序繼續(xù)執(zhí)行。一般來說,方法執(zhí)行前,會保存調(diào)用者當前的 PC 計數(shù)器中的值,當方法正常退出時,將該 PC 計數(shù)器的值會作為返回地址,返回給調(diào)用者。在方法異常退出時,返回地址是通過異常處理器表來確定的。

方法退出的過程實際上就等于把當前棧幀出棧,一般過程為:

  • 恢復上層方法的局部變量表和操作數(shù)棧
  • 把返回值壓入調(diào)用者棧幀的操作數(shù)棧中
  • 調(diào)整 PC 計數(shù)器的值,以指向方法調(diào)用指令后面的一條指令

到此這篇關(guān)于JVM 中的 returnAddress的文章就介紹到這了,更多相關(guān)JVM returnAddress內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中的文件操作總結(jié)(干貨)

    java中的文件操作總結(jié)(干貨)

    本篇文章主要介紹了java中的文件操作總結(jié)(干貨),主要有文件讀寫,遍歷文件夾,文件夾操作等,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Spring基于XML實現(xiàn)Aop

    Spring基于XML實現(xiàn)Aop

    這篇文章主要介紹了Spring中基于xml的AOP的詳細步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動登錄、購物記錄、作用路徑

    JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動登錄、購物記錄、作用路徑

    這篇文章主要介紹了JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動登錄、購物記錄、作用路徑的相關(guān)知識,非常不錯,對cookie持久化知識感興趣的朋友一起學習吧
    2016-08-08
  • SpringBoot整合Redis實現(xiàn)token緩存

    SpringBoot整合Redis實現(xiàn)token緩存

    于token通常會被多次使用,我們需要把它保存到緩存中,以減少頻繁地訪問數(shù)據(jù)庫,本文主要介紹了SpringBoot整合Redis實現(xiàn)token緩存,感興趣的可以了解一下
    2024-02-02
  • JVM內(nèi)存模型/內(nèi)存空間:運行時數(shù)據(jù)區(qū)

    JVM內(nèi)存模型/內(nèi)存空間:運行時數(shù)據(jù)區(qū)

    這篇文章主要介紹了JVM內(nèi)存模型/內(nèi)存空間的相關(guān)資料,幫助大家更好的理解和學習Java虛擬機,感興趣的朋友可以了解詳細,希望能夠給你帶來幫助
    2021-08-08
  • 淺談Java中類的實例化步驟

    淺談Java中類的實例化步驟

    今天小編就為大家分享一篇關(guān)于淺談Java中類的實例化步驟,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java對象集合按照指定元素順序排序的實現(xiàn)

    Java對象集合按照指定元素順序排序的實現(xiàn)

    最近在對一個集合列表的數(shù)據(jù)進行排序,需求是要集合數(shù)據(jù)按照一個排序狀態(tài)值進行排序,而這個狀態(tài)值,不是按照從小到大這樣的順序排序的,而是要按照特定的順序,所以本文給大家介紹了Java對象集合按照指定元素順序排序的實現(xiàn),需要的朋友可以參考下
    2024-07-07
  • SpringMVC4.3?HandlerExceptionResolver異常處理源碼解析

    SpringMVC4.3?HandlerExceptionResolver異常處理源碼解析

    這篇文章主要為大家介紹了SpringMVC4.3?HandlerExceptionResolver異常處理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-09-09
  • Spring循環(huán)引用失敗問題源碼解析

    Spring循環(huán)引用失敗問題源碼解析

    這篇文章主要為大家介紹了Spring循環(huán)引用失敗問題源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Java中Object.equals和String.equals的區(qū)別詳解

    Java中Object.equals和String.equals的區(qū)別詳解

    這篇文章主要給大家介紹了Java中Object.equals和String.equals的區(qū)別,文中通過一個小示例讓大家輕松的明白這兩者的區(qū)別,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04

最新評論

新昌县| 泰来县| 团风县| 洪雅县| 黄浦区| 富平县| 石城县| 两当县| 焦作市| 观塘区| 利辛县| 当涂县| 黑水县| 曲水县| 高要市| 祁连县| 大埔区| 清河县| 宜兰县| 阳春市| 贵溪市| 云林县| 宣汉县| 全南县| 太保市| 卢氏县| 长垣县| 濮阳县| 梅河口市| 沙田区| 黄大仙区| 江门市| 吴桥县| 灵宝市| 鄯善县| 诏安县| 灵川县| 探索| 云霄县| 毕节市| 马公市|