色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從Java入手如何了解虛擬機(VM)

汽車電子技術 ? 來源:程序猿搬磚 ? 作者:壞人 ? 2023-03-03 10:00 ? 次閱讀

「這里的虛擬機不是模擬完整硬件的虛擬機,這里主要了解的是JVM與DVM的架構,它們執行的是字節碼。」

虛擬機的設計架構有兩種: 基于求值棧、基于寄存器,如果從更大的范圍可以認為只要實現了功能的都可以認為是虛擬機,通過直接遍歷AST得到結果的也可以算一種虛擬機。

「基于AST」 的虛擬機是通過后序遍歷AST節點,利用調用棧遞歸的對AST求值,它的特點就是實現更簡單,利用更低級語言或者自身來實現。

「基于求值堆棧」 的虛擬機是零地址指令設計的一個很好的實踐,它的操作數是隱藏在棧頂的,利用了棧的先進后出的特點實現了運算的優先級,相對比寄存器方案他的指令數量更多,但是空間占用更低。

「基于虛擬寄存器」 的虛擬機可以是二地址或者三地址設計,操作數存放在虛擬寄存器中,很多指令只需要對寄存器進行讀取,不涉及到速度慢了很多的內存,相對于求值棧的方案,指令數量更少,空間占用更高。

「有圖有真相」

下面我們來看一段非常簡單的Java代碼,直觀的感受一下求值棧與寄存器方案的差異。

class Test {
  public static void foo() {  
        int a = 1;  
        int b = 2;  
        int c = (a + b) * 5;  
    } 
}

「求值棧寄存器」

這個程序很簡單,使用javac將它編譯成字節碼,再利用javap查看指令

javac Test.java
javap -v Test

得到如下指令:圖片

接下來,通過觀察指令執行流程了解JVM基于棧的邏輯:

可以看出,基于求值棧的VM在執行的時候會反復的對棧進行push與pop的操作,這樣一來需要執行的指令條數就多了。

當然,上面的指令是未優化的,實際上在生成指令之前可以將a與b直接優化掉(常數折疊),減少內存占用。

「寄存器虛擬機」

同樣是執行Java代碼, android 的Dalvik VM是采用基于寄存器的架構,通過以下命令:

dx --dex --no-optimize --output Test.dex Test.class

如果不顯示的指定--no-optimize,生成的Test.dex經過優化后,foo函數里面所有的變量與運算都被優化掉了,只剩下一個return-void指令,從上下文分析可以得出foo內部的a,b,c變量與其參與的運算都可以不需要。不經過優化的指令如下:

圖片指令執行流程如下:圖片編譯期已經確定棧幀的虛擬寄存器的數量,v3 v4是加載數據與運算時使用的寄存器,v0 v1 v2則對面最后三個變量。

數據一量裝入寄存器,在盡可能不使用內存的情況下只使用寄存器速度快得多,因為它不用頻繁與內存打交道了。

任何事物都有兩面性,棧相比寄存器架構它的可移植性更強,棧在任何機器上實現都很容易。在java設計之初就希望它是一個能在所有平臺上通吃的語言,所以JVM基于棧。

而寄存器架構的VM往往會把虛擬寄存器與實際的寄存器映射,如果虛擬寄存器的數量小于等于實際的寄存器,則實現起來相對容易,如果虛擬寄存器數量大于了實際的寄存器數量則相對復雜。

Dalvik只用于android平臺,性能往往是更需要關注的東西,這樣來講android 4.0x開始基于寄存器的DVM就可以理解了,此時的設備內存普遍高而且CPU的寄存器數量也多。

「總結:」 棧與寄存器架構各有優劣,任何的事物在設計之初都有它考慮的重點,它們沒有絕對的優劣,如果你要用AST來實現運算,只要滿足了你的要求,無可厚非。

好比時間與空間在寫的程序里永遠是一個矛盾的存在,人們總是在追求一個極致的平衡點。

如果你覺得文章對你有幫助,可以分享給更多的人或者點在看

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5421

    瀏覽量

    123267
  • 虛擬機
    +關注

    關注

    1

    文章

    962

    瀏覽量

    29013
  • AST
    AST
    +關注

    關注

    0

    文章

    7

    瀏覽量

    2382
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    VM虛擬機與主機不能互ping通

    VM橋接方式將LINUX虛擬機加入主機的局域網,兩者一個網段一個網關,然后發現虛擬機能ping通局域網內除了主機外的所有設備,唯獨不能ping通主機,同樣,主機也不能ping 通虛擬機
    發表于 04-10 21:55

    請問QTE可以同幾種JAVA虛擬機集成

    《嵌入式linux應用開發完全手冊》第500頁中有講:“QTE可以同幾種JAVA虛擬機集成。JAVA程序可以基于QTE的工作平臺上運行,提供同源程序相同的效果”我就是想請問,是否有那個版本的QTE是有帶
    發表于 05-24 05:45

    VM虛擬機開機等待1分30秒怎么解決

    VM虛擬機開機時多出1分30秒的解決方案
    發表于 10-30 08:36

    Java虛擬機介紹

    什么是JVM?Java虛擬機Java Virtual Machine, JVM)實際上是一個類似于真實計算機系統的抽象(Abstract Computing Machine),它擁
    發表于 04-10 16:15 ?0次下載

    Java虛擬機向ARM平臺的移植

    介紹Java 虛擬機的概念,以常用的KVM 為例,講述了將Java 虛擬機移植到ARM 平臺的方法,重點介紹了移植過程中的編譯選項。
    發表于 09-23 11:54 ?38次下載

    Java虛擬機向ARM平臺的移植

    介紹Java 虛擬機的概念,以常用的KVM 為例,講述了將Java 虛擬機移植到ARM 平臺的方法,重點介紹了移植過程中的編譯選項。
    發表于 09-23 11:54 ?22次下載

    微軟java虛擬機下載

    微軟java虛擬機下載:Java虛擬機(JVM)是Java Virtual Machine的縮寫,它是一個虛構出來的計算機,是通過在實際的計
    發表于 02-26 08:26 ?38次下載

    VM虛擬機詳細使用安裝教程

    VM虛擬機詳細使用安裝教程
    發表于 07-30 16:16 ?0次下載

    Java虛擬機基礎

    JVM基礎----java虛擬機的學習內容。
    發表于 10-30 10:21 ?0次下載

    深入JAVA虛擬機

    深入JAVA虛擬機
    發表于 03-19 11:24 ?1次下載

    JAVA虛擬機的體系結構及基本類型

    包含在被裝載類的方法中的指令。 當JAVA虛擬機運行一個程序時,它需要內存來存儲許多東西,例如:字節碼、已裝載的class文件中得到的其他信息、程序創建的對象、傳遞給方法的參數,返回值、局部變量等等。
    發表于 09-27 11:30 ?0次下載
    <b class='flag-5'>JAVA</b><b class='flag-5'>虛擬機</b>的體系結構及基本類型

    Java虛擬機參數調優

    隨著JAVA在應用系統級的項目開發中的使用越來越廣泛,虛擬機、垃圾收集、熱點編譯、J2EE等新技術層出不窮,JAVA作為系統級開發的一個選擇的優勢也越來越明顯,在此同時其不能完全編譯、垃圾收集等與生
    發表于 04-03 11:29 ?1次下載

    由淺入深的了解Java虛擬機

    說到Java虛擬機,相信作為Java程序員的小伙伴們都不陌生,他們每天都在寫Java代碼,寫的代碼都是在一個叫做Java
    的頭像 發表于 01-01 17:50 ?2489次閱讀

    Java:JVM虛擬機的入門知識

    Java開發現在面試越來越難了,進大廠必備的JVM、多線程高并發這都是最基礎的知識了,今天我們一起來學習Java虛擬機入門。
    的頭像 發表于 07-01 11:43 ?2456次閱讀
    <b class='flag-5'>Java</b>:JVM<b class='flag-5'>虛擬機</b>的入門知識

    Java虛擬機發展史:深入理解Java虛擬機

    1996年初sun公司發布的jdk1.0中所包含的sun Classic VM到今天,曾經涌現或消失過許多經典和特色的虛擬機出現。Classic VM只能使用純編輯器來執行。如果要使
    的頭像 發表于 07-01 11:57 ?2423次閱讀
    主站蜘蛛池模板: 在线自拍亚洲视频欧美 | 闺蜜撬开我的腿用黄瓜折磨我 | 玩高中女同桌肉色短丝袜脚文 | 国产精亚洲视频综合区 | 门事件快播 | 女张腿男人桶羞羞漫画 | 成年人国产视频 | 国产成人在线视频免费观看 | 在线视频 国产 日韩 欧美 | 秋秋影视午夜福利高清 | xxxx免费观看 | 蜜柚影院在线观看免费高清中文 | 亚洲a视频在线 | 97午夜理论片影院在线播放 | 亚洲精品欧美精品中文字幕 | 久久99热狠狠色一区二区 | 插曲的痛30分钟视频最新章节 | 精品国产品国语在线不卡丶 | 亚洲色欲国产AV精品综合 | 在线观看国产区 | 九九热精品在线 | 在线精品视频成人网 | 性欧美金发洋妞xxxxbbbb | 久久综久久美利坚合众国 | 日日碰狠狠躁久久躁综合网 | 欧美白人极品性喷潮 | 欧美 亚洲 日韩 在线综合 | 永久免费看A片无码网站四虎 | 99九九99九九九视频精品 | 污文乖不疼的 | 亚洲精品青青草原avav久久qv | 蜜臀AV人妻久久无码精品麻豆 | SM脚奴调教丨踩踏贱奴 | 国产av久久免费观看 | 国产自啪偷啪视频在线 | 久久国产香蕉 | 老色69久久九九精品高潮 | 国产精品一区二区激情 | 日本黄 色大片全 | 抽插性奴中出乳精内射 | 亚洲 自拍 偷拍 另类综合图区 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品