日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java編譯和解釋執行對比及原理解析

瀏覽:168日期:2022-09-01 18:46:03

編程語言分為低級語言和高級語言,機器語言、匯編語言是低級語言,C、C++、java、python等是高級語言。

機器語言是最底層的語言,能夠直接執行。而我們編寫的源代碼是人類語言, 計算機只能識別某些特定的二進制指令,在程序真正運行之前必須將源代碼轉換成二進制指令。

匯編語言通過匯編器翻譯成機器指令后執行,一條匯編指令,對應著一條機器指令。

高級語言編程的程序有三種執行方式:

1.一種是編譯執行,源程序先通過編譯器(負責將源程序翻譯成目標機器指令)翻譯成機器指令,通過編譯-->鏈接-->目標可執行文件,然后執行;即提前將所有源代碼一次性轉換成二進制指令,也就是生成一個可執行程序。比如C,C++等語言都是編譯執行的。

2.一種是解釋執行,是使用解釋器會將我們的一句句代碼解釋成機器可以識別的二進制代碼來執行,可以認為是,解釋一句,執行一句。在這個過程中,不會生成中間文件。如:腳本方式是一條條命令,在執行時,是由系統的解釋器,將其一條條翻譯成機器可識別的指令,例如shell腳本是由shell程序執行的,js是由瀏覽器解釋執行的。

3.最后一種是編譯和解釋相結合的執行方式,下面我們來說Java。

理解Java的幾個編譯器

前端編譯器:把.java文件轉變成.class文件。包括Sun的Javac、Eclipse JDT中的增量式編輯器(ECJ)

后端運行期即時編譯器(JIT編譯器,Just In Time Compiler):把字節碼轉成機器碼。包括HotSpot VM的C1、C2編譯器

靜態提前編譯器(AOT編譯器,Ahead Of Time Compiler):把*.java編譯成本地機器碼。包括GNU Compiler for the Java(GCJ)、Excelsior JET

Java采用的是解釋和編譯混合的模式

在編譯時期,我們通過將源代碼編譯成.class ,配合JVM這種跨平臺的抽象,屏蔽了底層計算機操作系統和硬件的區別,實現了“一次編譯,到處運行” 。 而在運行時期,目前主流的JVM 都是混合模式(-Xmixed),即解釋運行 和編譯運行配合使用。

Java一開始被定位為“解釋執行”的語言,但是現在主流的虛擬機中都包含了即時編譯器JIT。

程序從源代碼到運行經歷階段:java程序--(編譯javac)-->字節碼文件.class-->類裝載子系統化身為反射類Class--->運行時數據區--->(解釋執行+JIT編譯器編譯)-->操作系統(Win,Linux,Mac JVM)。

.class文件就是可以到處運行的文件。然后Java字節碼會被轉化為目標機器代碼,這是是由JVM來執行的,即Java的第二次編譯。

Java采用的是解釋和編譯混合的模式。它首先通過javac將源碼編譯成字節碼文件class.然后在運行的時候通過解釋器或者JIT將字節碼轉換成最終的機器碼。

JIT將字節碼轉換成最終的機器碼:

以 Oracle JDK提供的HotSpot虛擬機為例,在HotSpot虛擬機中,提供了兩種編譯模式:解釋執行 和 即時編譯(JIT,Just-In-Time)。解釋執行即逐條翻譯字節碼為可運行的機器碼,而即時編譯則以方法為單位將字節碼翻譯成機器碼(上述提到的“編譯執行”)。前者的優勢在于不用等待,后者則在實際運行當中效率更高。

即時編譯存在的意義在于它是提高程序性能的重要手段之一。根據“二八定律”(即:百分之二十的代碼占據百分之八十的系統資源),對于大部分不常用的代碼,我們無需耗時間將之編譯為機器碼,而是采用解釋執行的方式,用到就去逐條解釋運行;對于一些僅占據小部分的熱點代碼(可認為是反復執行的重要代碼),則可將之翻譯為符合機器的機器碼高效執行,提高程序的效率,此為運行時的即時編譯。

為了滿足不同的場景,HotSpot虛擬機內置了多個即時編譯器:C1,C2與Graal。Graal 是Java10正式引入的實驗性即時編譯器,在此暫不敘述(其實我不是很了解,尷尬···)。先看一下C1、C2 ,相信大家或多或少接觸過。

C1:即Client編譯器,面向對啟動性能有要求的客戶端GUI程序,采用的優化手段比較簡單,因此編譯的時間較短。 C2:即Server編譯器,面向對性能峰值有要求的服務端程序,采用的優化手段復雜,因此編譯時間長,但是在運行過程中性能更好。

從Java7開始,HotSpot虛擬機默認采用分層編譯的方式:熱點方法首先被C1編譯器編譯,而后 熱點方法中的熱點再進一步被C2編譯,根據前面的運行計算出更優的編譯優化。為了不干擾程序的正常運行,JIT編譯時放在額外的線程中執行的,HotSpot根據實際CPU的資源,以 1:2的比例分配給C1和C2線程數。在計算機資源充足的情況,字節碼的解釋運行和編譯運行時可以同時進行,JIT編譯執行完后的機器碼會在下次調用該方法時啟動,已替換原本的解釋執行(意思就是已經翻譯出效率更高的機器碼,自然替換原來的相對低效率執行的方法)。

以上,可以看出在Java中不單單是解釋執行,即時編譯(編譯執行)在Java性能優化中彰顯重要的作用,所以現在應該說:Java是解釋執行和編譯執行共同存在的,至少大部分是這樣。

編譯與解釋比較?

1.一段程序編譯會浪費時間,并且移植到其他平臺上時還要進行重新編譯,但是其編譯后生成的可執行文件運行速度快。

2.解釋型程序可跨平臺執行,無需將全部代碼編譯之后再運行,能夠及時運行,但因為是逐條解釋執行所以最終的運行速度不如編譯型程序。

3.內存使用:編譯執行需要生成編譯后的機器碼文件,而解釋執行時逐句解釋執行,所以解釋執行對內存占用更少。

單獨使用解釋器的缺點:

拋棄了JIT可能帶來的性能優勢。如果代碼沒有被JIT編譯的話,再次運行時需要重復解析。

單獨使用JIT編譯器的缺點:

需要將全部的代碼編譯成本地機器碼。要花更多的時間,JVM啟動會變慢非常多;

增加可執行代碼的長度(字節碼比JIT編譯后的機器碼小很多),這將導致頁面調度,從而降低程序的速度。

有些JIT編譯器的優化方式,比如分支預測,如果不進行profiling,往往并不能進行有效優化。

因此,HotSpot采用了惰性評估(Lazy Evaluation)的做法,根據二八定律,消耗大部分系統資源的只有那一小部分的代碼(熱點代碼),而這也就是JIT所需要編譯的部分。JVM會根據代碼每次被執行的情況收集信息并相應地做出一些優化,因此執行的次數越多,它的速度就越快。

JDK 9引入了一種新的編譯模式AOT(Ahead of Time Compilation),它是直接將字節碼編譯成機器碼,這樣就避免了JIT預熱等各方面的開銷。JDK支持分層編譯和AOT協作使用。

注:JIT為方法級,它會緩存編譯過的字節碼在CodeCache中,而不需要被重復解釋。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲国产一区二区在线观看| 欧美在线不卡| 国产成人精品一区二区三区在线| 欧美日韩亚洲三区| 国产精品观看| 国产日韩亚洲欧美精品| 麻豆精品av| 中文在线а√天堂| 国产99久久| 美国欧美日韩国产在线播放| 久久狠狠久久| 午夜精品久久久久久久久久蜜桃| 欧美午夜不卡影院在线观看完整版免费| 免费欧美一区| 日韩av一区二| 日本一区二区高清不卡| 亚洲激情欧美| 国产精品欧美在线观看| 国产亚洲一区二区手机在线观看| 免费欧美日韩| 91精品国产一区二区在线观看 | 国产麻豆久久| 亚洲一区二区三区久久久| 国产精品一区三区在线观看| 国产v综合v| 日本aⅴ亚洲精品中文乱码| 理论片午夜视频在线观看| 在线午夜精品| 精品日产乱码久久久久久仙踪林| 欧美成人国产| 国产欧美日韩影院| 国产精品av一区二区| 日韩不卡一区二区三区| 99热精品久久| 亚洲区国产区| 日韩精品中文字幕第1页| 伊人久久大香伊蕉在人线观看热v| 免费一级欧美片在线观看网站| 美女久久久久| 久久字幕精品一区| 免费人成在线不卡| 日韩啪啪电影网| 欧美综合精品| 亚洲欧美不卡| 日韩欧美字幕| 国产日韩在线观看视频| 欧美日韩国产在线观看网站| 国产精品videossex久久发布| 午夜久久一区| 国产精品成人**免费视频 | 国产毛片精品| 夜久久久久久| 久久电影tv| 国产精品一站二站| 亚洲欧美日韩在线观看a三区| 日韩av专区| 国产精品一线| 日韩精品a在线观看91| 成人av二区| 日本高清不卡一区二区三区视频| 久久精品99久久久| 免费视频一区三区| 精品一区二区三区视频在线播放| 亚洲精品麻豆| 亚洲欧美久久久| 色老板在线视频一区二区| 国产精品久久久一区二区| 久久国产精品99国产| 99久久99久久精品国产片果冰| 精品久久久久中文字幕小说| 国产色噜噜噜91在线精品| 婷婷精品在线| 亚洲丝袜美腿一区| 制服诱惑一区二区| 久久久久美女| 日韩电影免费网址| 欧美国产专区| 欧美日韩伊人| 日韩国产欧美一区二区三区| 免费成人av在线播放| 91久久在线| 午夜久久99| 欧美精选一区二区三区| 日本少妇一区| 久久久9色精品国产一区二区三区| 91综合网人人| 免费看av不卡| 日韩网站中文字幕| 视频福利一区| 国产一区日韩一区| 狠狠久久婷婷| 国产免费成人| 视频一区视频二区在线观看| 99国产精品99久久久久久粉嫩| 欧美日韩国产精品一区二区亚洲| 婷婷丁香综合| 亚洲深夜福利| 蜜桃av一区二区三区电影| 中文字幕av一区二区三区人| 亚洲精品免费观看| 日韩一区二区三区精品视频第3页| 日韩欧美在线精品| 国产剧情一区二区在线观看| 久久精品国产精品亚洲毛片| 成人一区而且| 欧美精品一区二区久久| 日韩亚洲精品在线| 亚洲制服一区| 欧美亚洲网站| 成人在线超碰| 在线日韩视频| 日本大胆欧美人术艺术动态| 日本伊人午夜精品| 久久精品毛片| 久久麻豆精品| 一区二区电影在线观看| 日本不卡一二三区黄网| 欧美激情麻豆| 99久久婷婷| 日韩欧美三区| 色婷婷亚洲mv天堂mv在影片| 亚洲一级二级| 亚洲在线观看| 国产精品一区2区3区| 欧美不卡高清一区二区三区| 亚洲尤物在线| 欧美精品二区| 亚洲激情不卡| 国产精品九九| 免费av一区二区三区四区| 日韩精品视频一区二区三区| 精品91福利视频| 午夜欧美理论片| 国产精品99久久免费| 亚洲韩日在线| 国产精品一区二区精品| 99久久精品国产亚洲精品| 亚洲一区二区成人| 欧美激情视频一区二区三区免费| 999国产精品永久免费视频app| 中文字幕日本一区二区| 超碰99在线| 亚洲精品观看| 日韩精品永久网址| 日本亚洲欧洲无免费码在线| 中文在线免费视频| 日韩动漫一区| 欧美+日本+国产+在线a∨观看| 青草国产精品| 欧美另类综合| 国产一区二区三区不卡视频网站| 免费在线视频一区| 欧美激情亚洲| 中文不卡在线| 久久精选视频| 国产福利资源一区| 六月婷婷一区| 日韩欧美视频专区| 欧美亚洲tv| 亚洲欧美日韩在线观看a三区| 日韩88av| 日韩不卡一二三区| 久久理论电影| 精品视频自拍| 亚洲精品影视| 日韩视频精品在线观看| www.51av欧美视频| 三级久久三级久久久| 国精品一区二区| 精品三级久久久| 国产午夜久久av| 亚洲综合色婷婷在线观看| 久久高清免费| 国产成人精品一区二区三区视频| 7777精品| 亚洲午夜免费| 国产亚洲精品久久久久婷婷瑜伽| 日韩和的一区二在线| 精品国产欧美| 国产精品v亚洲精品v日韩精品| 亚州av日韩av| 男人的天堂亚洲一区| 久久婷婷av| 五月激情久久| 裤袜国产欧美精品一区| 欧美a级一区二区| 91成人在线精品视频| 亚洲一级大片| 中文字幕日韩亚洲| 久久最新视频| 国产免费成人| 在线综合亚洲| 狠狠爱www人成狠狠爱综合网| 久久精品123| 欧美日韩在线观看视频小说| 久久久9色精品国产一区二区三区| 亚洲综合电影| 色一区二区三区四区| 97精品97| 久久精品动漫|