小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java三種編譯方式: 前端編譯 JIT編譯 AOT編譯

 自然科學(xué)思維 2017-11-02




21套精品Java架構(gòu)師高并發(fā)高性能高可用分布式集群電商緩存性能調(diào)優(yōu)設(shè)計(jì)項(xiàng)目教程

39階段精品云計(jì)算大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)視頻教程

互聯(lián)網(wǎng)技術(shù)(java框架、分布式、集群)干貨視頻大全

200本經(jīng)典編程相關(guān)書籍下載

程序員如何制作高質(zhì)量的簡歷【視頻 真實(shí)簡歷】


java程序代碼需要編譯后才能在虛擬機(jī)中運(yùn)行,編譯涉及到非常多的知識(shí)層面:編譯原理、語言規(guī)范、虛擬機(jī)規(guī)范、本地機(jī)器碼優(yōu)化等;了解編譯過程有利于了解整個(gè)Java運(yùn)行機(jī)制,不僅可以使得我們編寫出更優(yōu)秀的代碼,而且還可以使得在JVM調(diào)優(yōu)時(shí)更得心應(yīng)手。

       下面我們先來看下Java體系中的三種編譯方式:前端編譯、即時(shí)編譯(JIT編譯)、靜態(tài)提前編譯(AOT編譯),先來了解它們各有什么優(yōu)點(diǎn)和缺點(diǎn),再來看看主流的前端編譯 JIT編譯方式的運(yùn)作過程。

1、前端編譯

    把Java源碼文件(.java)編譯成Class文件(.class)的過程;

    也即把滿足Java語言規(guī)范的程序轉(zhuǎn)化為滿足JVM規(guī)范所要求格式的能;

優(yōu)點(diǎn):

a.這階段的優(yōu)化是指程序編碼方面的;

b.許多Java語法新特性('語法糖':泛型、內(nèi)部類等等),是靠前端編譯器實(shí)現(xiàn)的,而不是依賴虛擬機(jī);

c.編譯成的Class文件可以直接給JVM解釋器解釋執(zhí)行,省去編譯時(shí)間,加快啟動(dòng)速度;

缺點(diǎn):

1.對(duì)代碼運(yùn)行效率幾乎沒有任何優(yōu)化措施;

2.解釋執(zhí)行效率較低,所以需要結(jié)合下面的JIT編譯;    

3.前端編譯器:Oracle javac、Eclipse JDT中的增量式編譯器(ECJ)等;

2、后端編譯/即時(shí)(JIT)編譯

      通過Java虛擬機(jī)(JVM)內(nèi)置的即時(shí)編譯器(Just In Time Compiler,JIT編譯器);在運(yùn)行時(shí)把Class文件字節(jié)碼編譯成本地機(jī)器碼的過程;            

優(yōu)點(diǎn):

a.通過在運(yùn)行時(shí)收集監(jiān)控信息,把'熱點(diǎn)代碼'(Hot Spot Code)編譯成與本地平臺(tái)相關(guān)的機(jī)器碼,并進(jìn)行各種層次的優(yōu)化;

b.可以大大提高執(zhí)行效率;

缺點(diǎn):

a.收集監(jiān)控信息影響程序運(yùn)行;

b.編譯過程占用程序運(yùn)行時(shí)間(如使得啟動(dòng)速度變慢);

c.編譯機(jī)器碼占用內(nèi)存;

d.JIT編譯器:HotSpot虛擬機(jī)的C1、C2編譯器等;

 另外,JIT編譯速度及編譯結(jié)果的優(yōu)劣,是衡量一個(gè)JVM性能的很重要指標(biāo);所以對(duì)程序運(yùn)行性能優(yōu)化集中到這個(gè)階段;也就是說可以對(duì)這個(gè)階段進(jìn)行JVM調(diào)優(yōu);

3、靜態(tài)提前編譯(Ahead Of Time,AOT編譯)

       程序運(yùn)行前,直接把Java源碼文件(.java)編譯成本地機(jī)器碼的過程;

優(yōu)點(diǎn):

a.編譯不占用運(yùn)行時(shí)間,可以做一些較耗時(shí)的優(yōu)化,并可加快程序啟動(dòng);

b.把編譯的本地機(jī)器碼保存磁盤,不占用內(nèi)存,并可多次使用;

缺點(diǎn):

a.因?yàn)镴ava語言的動(dòng)態(tài)性(如反射)帶來了額外的復(fù)雜性,影響了靜態(tài)編譯代碼的質(zhì)量;

b.一般靜態(tài)編譯不如JIT編譯的質(zhì)量,這種方式用得比較少;

c.靜態(tài)提前編譯器(AOT編譯器):JAOTC、GCJ、Excelsior JET、ART (Android Runtime)等;

4、前端編譯 JIT編譯

到這里,我們知道目前Java體系中主要還是采用前端編譯 JIT編譯的方式,如JDK中的HotSpot虛擬機(jī)。

前端編譯 JIT編譯方式的運(yùn)作過程大體如下:

1、首先通過前端編譯把符合Java語言規(guī)范的程序代碼轉(zhuǎn)化為滿足JVM規(guī)范所要求Class格式;

2、然后程序啟動(dòng)時(shí)Class格式文件發(fā)揮作用,解釋執(zhí)行,省去編譯時(shí)間,加快啟動(dòng)速度;

3、針對(duì)Class解釋執(zhí)行效率低的問題,在運(yùn)行中收集性能監(jiān)控信息,得知'熱點(diǎn)代碼';

4、JIT逐漸發(fā)揮作用,把越來越多的熱點(diǎn)代碼'編譯優(yōu)化成本地代碼,提高執(zhí)行效率;


視頻資源下載

21套精品Java架構(gòu)師高并發(fā)高性能高可用分布式集群教程(4000G)

39階段精品云計(jì)算大數(shù)據(jù)項(xiàng)目實(shí)戰(zhàn)視頻教程

200本經(jīng)典編程相關(guān)書籍下載

互聯(lián)網(wǎng)技術(shù)(java框架、分布式、集群)干貨視頻大全

程序員如何制作高質(zhì)量的簡歷【視頻 真實(shí)簡歷】

 今日頭條號(hào):搜索 'JavaLeader'  (歡迎大家關(guān)注支持,頭條更精彩)

 java資源分享總?cè)?六) :238600498       java招聘信息共享群:489895481

 java微信技術(shù)群:微信搜索1257572500加好友,拉入群內(nèi)。

專注互聯(lián)網(wǎng)熱點(diǎn)信息,java干貨,行業(yè)最新技術(shù)視頻分享,我們的宗旨就是做全網(wǎng)最全最大的java視頻教免費(fèi)平臺(tái)。我們有適合不同階段人群的干貨。我們的平臺(tái)聚焦了幾萬的java高級(jí)程序員和架構(gòu)師。歡迎長按關(guān)注

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多