电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

詳解Java的編譯執行與解釋執行

瀏覽:6日期:2022-08-13 16:44:12
一、前言

編程語言分為低級語言和高級語言,機器語言、匯編語言是低級語言,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采用的是解釋和編譯混合的模式:基于JVM執行引擎當中的解釋器interpreter與即使編譯器JIT共存

詳解Java的編譯執行與解釋執行

執行引擎獲取到,由javac將源碼編譯成字節碼文件class.

然后在運行的時候通過解釋器interpreter轉換成最終的機器碼。(解釋型)

另外JVM平臺支持一種叫作即時編譯的技術。即時編譯的目的是避免函數被解釋執行,而是將整個函數體編譯成為機器碼,這種方式可以使執行效率大幅度提升(直接編譯型)

詳解Java的編譯執行與解釋執行

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的編譯執行與解釋執行的詳細內容,更多關于Java的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 潍坊青州古城旅游景点攻略_青州酒店美食推荐-青州旅游网 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 江西自考网-江西自学考试网| 天津中都白癜风医院_天津白癜风医院_天津治疗白癜风 | 美国查特CHART MVE液氮罐_查特杜瓦瓶_制造全球品质液氮罐 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦| 烟气在线监测系统_烟气在线监测仪_扬尘检测仪_空气质量监测站「山东风途物联网」 | 手术示教系统-数字化手术室系统-林之硕医疗云智能视频平台 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 丹佛斯变频器-丹佛斯压力开关-变送器-广州市风华机电设备有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 稳尚教育加盟-打造高考志愿填报平台_新高考志愿填报加盟_学业生涯规划加盟 | 旗帜网络笔记-免费领取《旗帜网络笔记》电子书 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 翰香原枣子坊加盟费多少钱-正宗枣核糕配方培训利润高飘香 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 机床导轨_导轨板_滚轮导轨-上海旻佑精密机械有限公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 999范文网_优质范文下载写作帮手 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 |