1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        JVM學習之JVM基礎知識

        共 2484字,需瀏覽 5分鐘

         ·

        2020-11-27 09:21

        點擊上方藍色字體,選擇“標星公眾號”

        優(yōu)質文章,第一時間送達

        ? 作者?|??碼頭工人

        來源 |? urlify.cn/FRNnAr

        66套java從入門到精通實戰(zhàn)課程分享

        一、Java技術體系

        1、Java體系構成

        1)Java程序語言

        2)Java虛擬機

        3)字節(jié)碼文件

        4)Java類庫

        5)第三方Java類庫

        2、JDK、JRE、JVM之間的關系

        1)JDK:Java程序語言、Java虛擬機和Java類庫統(tǒng)稱為JDK(Java Development Kit)

        2)JRE:Java類庫中的Java SE和Java虛擬機統(tǒng)稱為JDR(Java Runtime Enviroment)

        679c1d3b92d106843d15a1516ac31c6a.webp

        JVM介紹

        (1)JVM官方文檔定義

        The?Java?Virtual?Machine?is?an?abstract?computing?machine.?Like?a?real?computing?machine,?it?has?an?instruction?set?and?manipulates?various?memory?areas?at?run?time.?It?is?reasonably?common?to?implement?a?programming?language?using?a?virtual?machine;?the?best-known?virtual?machine?may?be?the?P-Code?machine?of?UCSD?Pascal.


        The?Java?Virtual?Machine?knows?nothing?of?the?Java?programming?language,?only?of?a?particular?binary?format,?the?class?file?format.?A?class?file?contains?Java?Virtual?Machine?instructions?(or?*bytecodes*)?and?a?symbol?table,?as?well?as?other?ancillary?information.

        (2)中文解釋

        Java虛擬機是一個抽象的計算機(本質上就是可運行程序)。它和真實的計算機相似,具有指令集且能夠在運行時對內存區(qū)域進行操作。Java虛擬機并不能直接解釋Java語言,它只能夠解釋特定的二進制格式,即.class文件(字節(jié)碼文件)。

        JVM結構

        336efc344cf81ae1f66d90828daff227.webp

        Java代碼執(zhí)行流程

        bdc93e39ed59cda78f10aafc4788b413.webp

        JVM架構模型

        1、指令架構

        (1)基于棧式架構

        a)設計和實現(xiàn)更簡單

        b)指令集小,編譯器易實現(xiàn)

        c)不需要硬件支持,可移植性更好,更容易實現(xiàn)跨平臺

        (2)基于寄存器架構

        a)依賴硬件,可移植性查

        b)執(zhí)行效率高

        2、例子

        (1)Java源碼

        public?class?StackTest?{

        ????public?static?void?main(String[]?args)?{
        ????????int?a?=?2;
        ????????int?b?=?3;
        ????????int?c?=?a?+?b;
        ????}
        }

        (2)C++源碼

        void?test()?{
        ????int?a?=?2;
        ????int?b?=?3;
        ????int?c?=?a?+?b;
        }

        (3)基于棧式結構計算過程


        使用jclasslib查看字節(jié)碼

        bb643dee8f2b00cb621ddc855c83e663.webp

        0?iconst_2????常量為2
        1?istore_1????將常量2保存至索引為1的操作數(shù)棧中
        2?iconst_3????常量為3
        3?istore_2????將常量2保存至索引為2的操作數(shù)棧中
        4?iload_1?????加載操作數(shù)棧索引為1所對應的值
        5?iload_2?????加載操作數(shù)棧索引為2所對應的值
        6?iadd????????相加
        7?istore_3????將相加結果保存至索引為3的操作數(shù)棧中
        8?return???

        (4)基于寄存器結構計算過程

        Android studio編寫完后使用ida查看指令,ARM32下的匯編指令

        e745cb25ad92b66775272b367278c593.webp

        SUB?????????????SP,?SP,?#0xC
        MOVS????????????R0,?#2??????????????????????操作數(shù)2移動至R0寄存器?
        STR?????????????R0,?[SP,#0xC+var_4]?????????R0寄存器的值寫入[SP,#0xC+var_4]地址
        MOVS????????????R0,?#3??????????????????????操作數(shù)3移動至R0寄存器?
        STR?????????????R0,?[SP,#0xC+var_8]?????????R0寄存器的值寫入[SP,#0xC+var_8]地址
        LDR?????????????R0,?[SP,#0xC+var_4]?????????[SP,#0xC+var_4]的值讀入R0寄存器
        LDR?????????????R1,?[SP,#0xC+var_8]?????????[SP,#0xC+var_8]的值讀入R1寄存器
        ADD?????????????R0,?R1??????????????????????R0,?R1寄存器相加,結果放置R0寄存器
        STR?????????????R0,?[SP,#0xC+var_C]?????????R0寄存器的值寫入[SP,#0xC+var_C]地址
        ADD?????????????SP,?SP,?#0xC
        BX??????????????LR

        3、思考

        網(wǎng)上常有結論,在完成相同操作的情況下,基于棧式架構比基于寄存器架構的指令路量要多。這種說法嚴謹嗎?

        可以從上面例子中看出ARM32下的基于寄存器架構的指令數(shù)量并不比基于棧式結構的指令數(shù)量少。很多人只討論了x86架構下的指令數(shù)量,而忽略了ARM架構下的指令集數(shù)量。




        粉絲福利:實戰(zhàn)springboot+CAS單點登錄系統(tǒng)視頻教程免費領取

        ???

        ?長按上方微信二維碼?2 秒即可獲取資料



        感謝點贊支持下哈?160facc2b7f4719ab2a46c373bcdb23c.webp

        瀏覽 59
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久久久噜噜噜亚洲熟女综合 | 丰满少妇与子厨房伦 | 福利控一级黄色片站长推出操逼了 | 夜夜天天 | 香蕉电影网 | 破外女出血一级毛片A片 | 女人被狂躁到高潮视频在线观看 | 午夜爱爱爱爱爽爽爽爽视频网站 | jizz成熟丰满老女人印度女人 | 波多野结衣丝袜诱惑 |